[JavaScript] 주민등록번호 유효성 검사

주민등록번호에는 유효성 검사 로직이 있습니다. 그 방법은 다음과 같습니다. 맨 마지막 한 자리를 제외하고 각 자릿수의 숫자들에 각각 지정된 숫자들을 곱해서, 그 값을 모두 더합니다. 


 1 

1

2

3

4

5

6

7

X


 X 

 X 

 X 

 X 

 X 

 X 

2


8

2

3

 5 

 


n1 +n2 +n3 +n4 +n5 +n6  +n7 +n8 +n9 +n10 +n11+n12  =N  각 자릿수에 지정된 수의 곱을  더한 값을 N이라고 하면, N을 11로 나눈 나머지를 11에서 뺀 수가 주민등록번호 마지막 자릿수와 일치하면 정상적인 주민등록번호입니다.


주민등록번호 유효성 검사 예제

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
 <title>회원가입-자바스크립트</title>
<script  language="javascript">
    function validate() {
        var re = /^[a-zA-Z0-9]{4,12}$/ // 아이디와 패스워드가 적합한지 검사할 정규식
        var re2 = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i;
        // 이메일이 적합한지 검사할 정규식

        var num1 = document.getElementById("unum1");
        var num2 = document.getElementById("unum2");

        var arrNum1 = new Array(); // 주민번호 앞자리숫자 6개를 담을 배열
        var arrNum2 = new Array(); // 주민번호 뒷자리숫자 7개를 담을 배열

        // -------------- 주민번호 -------------

        for (var i=0; i<num1.value.length; i++) {
            arrNum1[i] = num1.value.charAt(i);
        } // 주민번호 앞자리를 배열에 순서대로 담는다.

        for (var i=0; i<num2.value.length; i++) {
            arrNum2[i] = num2.value.charAt(i);
        } // 주민번호 뒷자리를 배열에 순서대로 담는다.

        var tempSum=0;

        for (var i=0; i<num1.value.length; i++) {
            tempSum += arrNum1[i] * (2+i);
        } // 주민번호 검사방법을 적용하여 앞 번호를 모두 계산하여 더함

        for (var i=0; i<num2.value.length-1; i++) {
            if(i>=2) {
                tempSum += arrNum2[i] * i;
            }
            else {
                tempSum += arrNum2[i] * (8+i);
            }
        } // 같은방식으로 앞 번호 계산한것의 합에 뒷번호 계산한것을 모두 더함

        if((11-(tempSum%11))%10!=arrNum2[6]) {
            alert("올바른 주민번호가 아닙니다.");
            num1.value = "";
            num2.value = "";
            num1.focus();
            return false;
        }else{
        	alert("올바른 주민등록번호 입니다.");
        }
    }

    function check(re, what, message) {
        if(re.test(what.value)) {
            return true;
        }
        alert(message);
        what.value = "";
        what.focus();
        //return false;
    }
</script>
<style>
   @import url(http://fonts.googleapis.com/earlyaccess/nanumpenscript.css);
   body{font-family: 'Nanum Pen Script';}
</style>
</head>
<body>
<table width="350" height="100" border="1" align="center" cellspacing="0">
  <tr height="10" align="center">
      <td colspan="2" style="background:navy;" ><font color=white><b>주민등록 유효성검사</b></font></td>
  </tr>
  <tr>
      <td align="center">주민등록번호:</td>
      <td align="center">
             <input type="text" name="unum1" id="unum1" size="12" maxlength="6">-</input>
             <input type="password" name="unum2" id="unum2" size="12" maxlength="7"></input><br/>
   	    예) 123456-1234567
      </td>
  </tr>
</table>
<center>
  <br/>
  <input type="button" value="검사" style="border-radius:5px; font-s" onclick="validate();" />
  <input type="reset" value="다시입력" style="border-radius:5px;" />
</center>
</body>
</html>

주민등록검사




댓글(2)

  • 일리단사오육칠
    2020.02.06 13:07

    const input = new Array() // 주민번호 숫자 13개를 담을 배열

    const code = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5, 0]
    const isCorrectIdentity = number => (11 - input.reduce((total, d, i) => total + d * code[i], 0) % 11) % 10 === +number[12]

    이렇게 좀 요약할 수 있을것 같아요

  • 2020.09.08 07:10 신고

    감사합니다

Designed by JB FACTORY