18자리 ID번호의 의미
1~2자리 지방, 자치구 또는 자치단체 코드
3~4자리 현급 시, 리그, 자치현 코드
5~6자리 카운티, 카운티급 도시, 지역 코드
생년월일의 7~14자리, 예를 들어 19670401은 1967년 4월 1일을 나타냅니다.
15~17번째 숫자는 일련번호이며, 그 중 17자리는 남자의 경우 홀수, 여자의 경우 짝수입니다.
18자리는 수식에 의해 무작위로 생성된 검사 코드(0-9 및 X)입니다.
34는 안후이성
05는 마안산시
23은 허현
19800101은 생년월일(1980년 1월 1일)입니다.
001은 일련 번호입니다(1은 홀수, 남성을 나타냄)
3은 인증코드입니다
베이징시(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)
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자리의 곱의 합을 구합니다.
그런 다음 나머지를 요청하세요.
185% 11 = 9
마지막으로 해당 규칙을 통해 나머지 9에 해당하는 숫자는 3임을 알 수 있습니다. 따라서 이는 적격한 ID 번호라고 판단할 수 있습니다.
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 "非法地区";
그런 다음 생년월일이 적법한지 확인하세요.
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?" 男":"女") } </script>