by holland100 [SQL Query] 주민등록번호 유효성검사 [2021.01.20 15:53:57]
안녕하세요. 주민등록번호 유효성 검사 함수를 아래와 같이 만들었는데요.
2020년생인 201209-4444444 번호가
리턴값이 1이 아니라 0으로 나와서 오류가 됩니다.
1이 정상이고 0이 오류인데 왜 그런지 봐주실 수 있으신가요?
감사합니다.
ALTER FUNCTION [dbo].[fnResIdChk]
(
@NUM VARCHAR(15) --주민등록번호
)
RETURNS CHAR(1) AS
BEGIN
DECLARE @WK_JUMIN_NO VARCHAR(13),
@WK_CHECK_BIT VARCHAR(12) = '234567892345', --검증값
@WK_TOTAL INT = 0,
@WK_RESULT INT = 0,
@WK_RETURN INT = 0,
@LOOP INT = 0
BEGIN
SET @WK_JUMIN_NO = REPLACE(@NUM, '-', '')
IF ISNUMERIC(@WK_JUMIN_NO) = 0
RETURN '0'
SET @LOOP = 1
WHILE @LOOP <= 12
BEGIN
SET @WK_TOTAL = @WK_TOTAL
+ CONVERT(INT, SUBSTRING(@WK_JUMIN_NO, @LOOP, 1))
* CONVERT(INT, SUBSTRING(@WK_CHECK_BIT, @LOOP, 1))
SET @LOOP += 1
END
--외국인
IF SUBSTRING(@WK_JUMIN_NO, 7, 1) IN ('5', '6', '7', '8')
SET @WK_RESULT = (13 - (@WK_TOTAL % 11)) % 10
--내국인
ELSE
SET @WK_RESULT = (11 - (@WK_TOTAL % 11)) % 10
IF SUBSTRING(@WK_JUMIN_NO,13,1) = CONVERT(VARCHAR, @WK_RESULT)
SET @WK_RETURN = 1
ELSE
SET @WK_RETURN = 0
END
RETURN CONVERT(VARCHAR, @WK_RETURN)
오류 번호 맞는데요?
그런데, 이거 테스트용 가짜 번호인가요?
진짜 주민번호라면 이런데 올리면 안될텐데요....
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | WITH t AS ( SELECT '201209-4444444' num UNION ALL SELECT '201209-4444440' ) SELECT num , ( CASE WHEN SUBSTRING (num, 7, 1) IN ( '5' , '6' , '7' , '8' ) THEN 13 ELSE 11 END - ( SUBSTRING (num, 1, 1) * 2 + SUBSTRING (num, 2, 1) * 3 + SUBSTRING (num, 3, 1) * 4 + SUBSTRING (num, 4, 1) * 5 + SUBSTRING (num, 5, 1) * 6 + SUBSTRING (num, 6, 1) * 7 + SUBSTRING (num, 7, 1) * 8 + SUBSTRING (num, 8, 1) * 9 + SUBSTRING (num, 9, 1) * 2 + SUBSTRING (num, 10, 1) * 3 + SUBSTRING (num, 11, 1) * 4 + SUBSTRING (num, 12, 1) * 5 ) % 11 ) % 10 v_check , SUBSTRING (num, 13, 1) v_13 FROM ( SELECT REPLACE (num, '-' , '' ) num FROM t) a ; |