>  기사  >  웹 프론트엔드  >  JavaScript는 신분증 확인 코드_javascript 기술을 구현합니다.

JavaScript는 신분증 확인 코드_javascript 기술을 구현합니다.

WBOY
WBOY원래의
2016-05-16 15:15:181200검색

18자리 ID번호의 의미

1~2자리 지방, 자치구 또는 자치단체 코드
3~4자리 현급 시, 리그, 자치현 코드
5~6자리 카운티, 카운티급 도시, 지역 코드
생년월일의 7~14자리, 예를 들어 19670401은 1967년 4월 1일을 나타냅니다.
15~17번째 숫자는 일련번호이며, 그 중 17자리는 남자의 경우 홀수, 여자의 경우 짝수입니다.
18자리는 수식에 의해 무작위로 생성된 검사 코드(0-9 및 X)입니다.

예:


340523 1980 0101 0013 이 ID 번호의 의미:

34는 안후이성
05는 마안산시
23은 허현
19800101은 생년월일(1980년 1월 1일)입니다.
001은 일련 번호입니다(1은 홀수, 남성을 나타냄)
3은 인증코드입니다

행정구역 코드


군 이상 최신 행정구역 코드(2014년 10월 31일 기준)

베이징시(110000BJ)

천진시 (120000 TJ)
허베이성(130000HE)
산시성(140000 SX)
내몽골자치구(150000NM)
랴오닝성(210000LN)
길림성(220000JL)
흑룡강성(230000 HL)
상하이(310000SH)
장쑤성(320000 JS)
절강성(330000ZJ)
안휘성(340000AH)
푸젠성(350000FJ)
장시성(360000JX)
산둥성(370000SD)
허난성(410000HA)
후베이성(420000HB)
후난성(430000HN)
광둥성(440,000GD)
광시좡족자치구(450000GX)
하이난성(460000HI)
충칭시(500000 CQ)
쓰촨성(510000SC)
구이저우성(520000GZ)
윈난성(530000YN)
티베트 자치구(540000 XZ)
산시성(610000SN)
간쑤성(620000GS)
칭하이성(630000QH)
닝샤회족자치구(640000 NX)
신장위구르자치구(650000XJ)
대만 지방(710000 Tw)
홍콩특별행정구(810000 HK)
마카오 특별행정구(820000Mo)

신분증 18자리 계산방법(체크코드)

ID 번호의 처음 17자리에 다양한 계수를 곱하세요.
첫 번째부터 17번째 위치까지의 계수는 다음과 같습니다. 7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2
이 17자리 숫자와 계수를 곱한 결과를 더하세요.
더한 합계를 11로 나누어 나머지가 무엇인지 확인하세요.
나머지는 11개의 숫자만 가능합니다: 0-1-2-3-4-5-6-7-8-9-10; 해당 마지막 ID 번호는 1-0-X-9-8-7-6-5-4-3-2입니다
위에서부터 나머지가 2이면 신분증 18번째 자리에 로마숫자 X가 나타난다는 것을 알 수 있습니다. 나머지가 10이면 신분증의 마지막 숫자는 2입니다.
예:
어떤 남성의 ID번호는 340523198001010013이다. 이 신분증이 합법적인 신분증인지 확인해야 합니다.

먼저 처음 17자리의 곱의 합을 구합니다.

(3*7+4*9+0*10+5*5+2*8+3*4+1*2+9*1+8*6+0*3+0*7+1*9+0 *10+1*5+0*8+0*4+1*2) = 185

그런 다음 나머지를 요청하세요.
185% 11 = 9
마지막으로 해당 규칙을 통해 나머지 9에 해당하는 숫자는 3임을 알 수 있습니다. 따라서 이는 적격한 ID 번호라고 판단할 수 있습니다.


18자리 신분증 인증을 위한 자바스크립트


코드 복사 코드는 다음과 같습니다.var city = {11:"Beijing",12: "천진" ,13:"허베이",14:"산시",15:"내몽골",21:"랴오닝",22:"지린",23:"헤이룽장",31:"상하이",32:" Jiangsu",33:"Zhejiang",34:"Anhui",35:"Fujian",36:"Jiangxi",37:"Shandong",41:"Henan",42:"Hubei",43:"Hunan" ,44:" 광동",45:"광시",46:"하이난",50:"충칭",51:"쓰촨",52:"구이저우",53:"윈난",54:"티베트",61 :"산시" ,62:"간쑤",63:"칭하이",64:"닝샤",65:"신장",71:"대만",81:"홍콩",82:"마카오",91: "해외"}
변수 ID = '340523198001010013';


먼저 자릿수가 18자리인지 확인하세요.

if(!/^\d{17}(\d|x)$/i.test(ID)) return false;
// \d  匹配数字
// ^  匹配开始
// $  匹配结尾
// i  不区分大小写
// {17} 匹配17次
// \d|x 匹配数字或x
그런 다음 처음 두 자리가 합법적인 도(지방자치단체/자치구)인지 확인하세요.

if(city[ID.substr(0,2)] === undefined) return "非法地区";
// stringObject.substr(start,length) 메소드는 문자열
의 시작 첨자부터 시작하여 지정된 수의 문자를 추출할 수 있습니다. // 객체 속성에 액세스할 때 점(.) 구문을 사용하는 것 외에도 대괄호([])를 사용할 수도 있습니다. 대괄호를 사용하는 것이 더 유연합니다.



그런 다음 생년월일이 적법한지 확인하세요.

var birthday = ID.substr(6, 4) + '/' + Number(ID.substr(10, 2)) + '/' + Number(ID.substr(12, 2));
var d = new Date(birthday);
var newBirthday = d.getFullYear() + '/' + Number(d.getMonth() + 1) + '/' + Number(d.getDate());
var currentTime = new Date().getTime();
var time = d.getTime();
if(time >= currentTime || birthday !== newBirthday) return '非法生日';
// 获取身份证的年月日,然后再 new 一个 Date,再对比这两个日期是否一致
// 这里用Number()主要是因为身份证的日期是带0的,而new Date()出来的日期是不带0的,Number()之后就都不带0了
마지막으로 검사 코드가 올바른지 확인하세요.

var arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
var arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
var sum = 0, i, residue;
for(i=0; i<17; i++) {
 sum += ID.substr(i, 1) * arrInt[i];
}
residue = arrCh[sum % 11];
if (residue !== ID.substr(17, 1)) '非法证号';
위 인증을 통과하면 법적 주민등록번호입니다.

전체 코드


<script>
 function checkID(ID) {
  if(typeof ID !== 'string') return '非法字符串';
  var city = {11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江 ",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北 ",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏 ",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"};
  var birthday = ID.substr(6, 4) + '/' + Number(ID.substr(10, 2)) + '/' + Number(ID.substr(12, 2));
  var d = new Date(birthday);
  var newBirthday = d.getFullYear() + '/' + Number(d.getMonth() + 1) + '/' + Number(d.getDate());
  var currentTime = new Date().getTime();
  var time = d.getTime();
  var arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
  var arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
  var sum = 0, i, residue;
 
  if(!/^\d{17}(\d|x)$/i.test(ID)) return '非法身份证';
  if(city[ID.substr(0,2)] === undefined) return "非法地区";
  if(time >= currentTime || birthday !== newBirthday) return '非法生日';
  for(i=0; i<17; i++) {
   sum += ID.substr(i, 1) * arrInt[i];
  }
  residue = arrCh[sum % 11];
  if (residue !== ID.substr(17, 1)) return '非法身份证哦';
 
  return city[ID.substr(0,2)]+","+birthday+","+(ID.substr(16,1)%2&#63;" 男":"女")
 }
</script>
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.