在工作中的第一个项目就遇到了身份证号码验证问题,当时的做法是先正则进而判断前六位是否对应和出生日期是否是存在的时间,后四位果断扔掉不管,完全让后端去判断。但是在验证的阶段却出现了省市的编号收集不全、整个对象过大等问题。百般无奈中发现了身份证验证算法,采用javascript实现:
</pre><pre name="code" class="javascript">idCardCheck = function(sId) {
if (sId.length > 18) {
return false;
}
var idNumberBase = sId.substr(0, 17);
var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
var verifyNumbers = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
var checkSum = 0;
for(var i=0;i<idNumberBase.length; i++)
{
checkSum += parseInt(idNumberBase.substr(i,1)) * factor[i];
}
var mod = checkSum % 11;
var verifyNumber = verifyNumbers[mod];
var lastNum = sId.substr(17, 1);
if(verifyNumber == lastNum || (verifyNumber == 'X' && lastNum == 'x'))
{
return true;
}
return false;
};