JS实现第二代身份证号码校验算法详解

作者:木棉

时间:2026-10-26

浏览:97

本文解析了基于JavaScript的第二代身份证号码本地校验机制。通过提取前17位数字与特定权重数组相乘求和,再对11取模,将结果映射为对应的校验位(含X)。该算法无需联网即可验证身份证号的合法性,代码源自盛大,供开发者参考实现前端快速校验功能。

文章目录

身份证本地校验机制解析

鉴于响应速度极快,可以确定该过程并非依赖网络联机校验,这意味着第二代身份证除了包含表示出生日期和性别的常规字段外,还内置了自我校验规则。通过查看页面源码,发现这段JavaScript代码未被压缩,因此其逻辑清晰易懂。


在此向各位科普这一机制,尽管可能已是常识,但仍值得分享。


以下代码源自相关资源,版权归盛大所有。此外,维基百科也提供了更详细的介绍和算法说明。


JavaScript校验代码实现

具体实现代码如下:

 
iW = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);
iSum = 0;
for( i=0;i<17;i++){
iC = v_card.charAt(i) ;
iVal = parseInt(iC);
iSum += iVal * iW[i];
} 
iJYM = iSum % 11;
var sJYM = '';
if(iJYM == 0) sJYM = "1";
else if(iJYM == 1) sJYM = "0";
else if(iJYM == 2) sJYM = "x";
else if(iJYM == 3) sJYM = "9";
else if(iJYM == 4) sJYM = "8";
else if(iJYM == 5) sJYM = "7";
else if(iJYM == 6) sJYM = "6";
else if(iJYM == 7) sJYM = "5";
else if(iJYM == 8) sJYM = "4";
else if(iJYM == 9) sJYM = "3";
else if(iJYM == 10) sJYM = "2";
var cCheck = v_card.charAt(17).toLowerCase();
if( cCheck != sJYM ){
return false; //对不上就是假号码
} 

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章