1800년대
남자 : 981231-9123456
여자 : 950101-0123456
1900년대
남자 : 580728-1012345
여자 : 791209-2982827
2000년대
남자 : 091208-3291828
여자 : 111111-4292383
13번째의 숫자 check digit 는 따지지 않습니다.
위의 주민등록번호를 예로 들어 가장 짧게 검사하는 정규표현식을 작성해 주세요.
년도는 숫자 두자리면 모두 통과됩니다.
월과 일은 정확하게 따지지만 윤년은 따지지 않습니다.
7번째 자리는 정확하게 따집니다.
댓글 19개
<?php
$str = '091220-3291828';
preg_match("`^\d{2}((0[1,3,5,7,8]((0[1-9])|([1,2][0-9])|30|31))|(0[4,6,9]((0[1-9])|([1,2][0-9])|30))|((10|12)((0[1-9])|([1,2][0-9])|30|31))|(11((0[1-9])|([1,2][0-9])|30))|(02((0[1-9])|([1,2][0-9]))))-[9,0,1,2,3,4]\d{6}$`", $str, $m);
print_r($m);
?>
이게 의미가 있는지 모르겟지만 ......
아무튼 이렇게 되지 않을까 싶습니다.
2월달은 29일까지 체크되게 햇습니다.
$str = '091220-3291828';
preg_match("`^\d{2}((0[1,3,5,7,8]((0[1-9])|([1,2][0-9])|30|31))|(0[4,6,9]((0[1-9])|([1,2][0-9])|30))|((10|12)((0[1-9])|([1,2][0-9])|30|31))|(11((0[1-9])|([1,2][0-9])|30))|(02((0[1-9])|([1,2][0-9]))))-[9,0,1,2,3,4]\d{6}$`", $str, $m);
print_r($m);
?>
이게 의미가 있는지 모르겟지만 ......
아무튼 이렇게 되지 않을까 싶습니다.
2월달은 29일까지 체크되게 햇습니다.
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기