DBA/Postgresql

법인등록번호 정합성 체크 FUNCTION

da-dba 2024. 4. 24. 17:44
CREATE OR REPLACE FUNCTION public.chk_biz_corp_no(no text)
 RETURNS character
 LANGUAGE plpgsql
AS $function$
DECLARE
    number_map INTEGER[];
    key_arr INTEGER[];
    chk INTEGER := 0;
BEGIN
    -- Remove dashes
    no := REPLACE(no, '-', '');
 
 
    -- Convert string to array of integers
    number_map := string_to_array(no, NULL)::INTEGER[];
 
 
    IF array_length(number_map, 1) = 10 THEN
        -- Check the validity of business registration number
        key_arr := ARRAY[1, 3, 7, 1, 3, 7, 1, 3, 5];
         
        FOR i IN 1..9 LOOP
            chk := chk + key_arr[i] * number_map[i];
        END LOOP;
 
 
        chk := chk + (key_arr[9] * number_map[9]) / 10;
        RETURN CASE WHEN floor(number_map[10]) = ((10 - (chk % 10)) % 10) THEN 'Y' ELSE 'N' END;
 
 
    ELSIF array_length(number_map, 1) = 13 THEN
        -- Check validity of corporate registration number
        FOR index01 IN 1..12 LOOP
            IF index01 % 2 = 1 THEN
                chk := chk + number_map[index01];
            ELSE
                chk := chk + number_map[index01] * 2 / 10 + number_map[index01] * 2 % 10;
            END IF;
        END LOOP;
 
 
        RETURN CASE WHEN number_map[12] = ((10 - (chk % 10)) % 10) THEN 'Y' ELSE 'N' END;
 
 
    ELSE
        -- Invalid length
        RETURN 'N';
    END IF;
END;
$function$
;
 
 
-- Permissions

'DBA > Postgresql' 카테고리의 다른 글

PostgreSQL -psql 접속  (0) 2024.04.25
주민등록번호 정합성 체크 FUNCTION  (0) 2024.04.24
사업자번호 정합성 체크 FUNCTION  (1) 2024.04.24
Postgresql hash partition 생성 스크립트  (0) 2024.04.24
Postgresql 파티션 이동  (0) 2024.04.24