MCPcopy
hub / github.com/Louiszhai/tool / verify

Function verify

js/idCard/idCard.js:18–40  ·  view source on GitHub ↗

* 18位身份证号依次包含: 6位地区码 + 8位生日码 + 3位顺序码 + 1位校验码. 校验码生成规则如下: * * 1、将前面的身份证号码17位数分别乘以不同的系数. 从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2. * 2、将这17位数字和系数相乘的结果相加. * 3、用加出来和除以11,看余数是多少. * 4、余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字. 其分别对应的最后一位身份证的号码为1-0-X -9-8-7-6-5-4-3-2. * 5、如果对应的数字是0, 身份证的最后一位号码就是数

(cardId)

Source from the content-addressed store, hash-verified

16 * @returns {boolean}
17 */
18function verify(cardId) {
19 var weightingFactor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2], // 加权因子
20 checkCodes = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]; // 校验码
21
22 if (/^\d{17}(\d|x)$/i.test(cardId)) { // 判断身份证格式是否正确
23 var year = cardId.substr(6, 4),
24 month = cardId.substr(10, 2),
25 day = cardId.substr(12, 2),
26 array = [year, month, day];
27
28 if (date2String(new Date(array.join('-'))) === array.join('')) { // 判断生日码是否正确
29 var k, sum = 0, cardIds = cardId.split('');
30 for(var i = 0; i < cardIds.length - 1; i++){
31 sum += +cardIds[i] * weightingFactor[i]; // 对前17位数字与权值乘积求和
32 }
33 // 计算模
34 k = sum % 11;
35 // 判断第18位是否与校验码相等
36 return cardIds[17].toUpperCase() == checkCodes[k];
37 }
38 }
39 return false;
40}
41
42function date2String(date) {
43 var year = date.getFullYear(),

Callers

nothing calls this directly

Calls 1

date2StringFunction · 0.70

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…