본문 바로가기
연구_고민/PHP & MySql

주민등록번호 알고리즘..이라..

by DevG 2007. 11. 12.


각 자리에
2 3 4 5 6 7 8 9 2 3 4 5
를 순서대로 곱하고..
다 더한다음에
11로 나누고
나눈 나머지를 11에서 뺀수를 맨뒤에 붙인다...10일경우 0

흐음..

어디보자~
검사하는 식을 만들어보면...

$ssn; //여기에 12자리 순수 숫자들로만 구성된 민번이 들어간다고 치고..
$key=array(2 ,3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5); 키가 되는 값들을 입력을 하고~

에~ 어디보자.. ssn을 어찌 쪼갤까...흐음..

sub_str($ssn,0,1); 이렇게 11자리 쪼개는거 말고 뭐 간단한거 없나?없나보군.. 젠장...

for($i=0;$i=<strlen($ssn);$i++){
$ssn_array[$i]=sub_str($ssn,$i,1);
}
이렇게 해서 한개씩 쪼개고...

for($i=0;$i=<strlen($ssn);$i++){
$sum+=$ssn_array[$i]*$key[$i];
}
이렇게 합을 구하고..
$tmp=$sum%11;
$check_key=11-$tmp;

이렇게 검사키를 만들고..

if($check_key==10)
   $check_key=0;
10일경우 처리해주고..

if($check_key==$ssn_array[12])
   echo "진짜민번";
else
  echo "가짜민번";

이렇게 되는건가?

흐음..

정리해서... 함수화 시키면..

function ssn_check($ssn){

$key=array(2 ,3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5);

for($i=0;$i=<13;$i++){
    $ssn_array[$i]=sub_str($ssn,$i,1);
}

for($i=0;$i<12;$i++){
    $sum+=$ssn_array[$i]*$key[$i];
}

$tmp=$sum%11;
$check_key=11-$tmp;

if($check_key==10)
   $check_key=0;

if($check_key==$ssn_array[12])
   return true;
else
   return false;
}

이렇게 되는데 맞나? ㄱ-;; 아님 말고..
이거뭐.. 조금만 바꾸면.. 민번 생성도 가능하네...(요샌 별 쓸모 없지만..)