JavaScript 18-bit ID card verification and ID number rules

<script>
  function checkID(ID) {
    if(typeof ID !== 'string') return 'illegal string';
    var city = {11:"Beijing",12:"Tianjin",13:"Hebei",14 :"Shanxi",15:"Inner Mongolia",21:"Liaoning",22:"Jilin",23:"Heilongjiang",31:"Shanghai",32:"Jiangsu",33:"Zhejiang",34:" Anhui", 35: "Fujian", 36: "Jiangxi", 37: "Shandong", 41: "Henan", 42: "Hubei", 43: "Hunan", 44: "Guangdong", 45: "Guangxi" ,46:"Hainan",50:"Chongqing",51:"Sichuan",52:"Guizhou",53:"Yunnan",54:"Tibet",61:"Shaanxi",62:"Gansu",63 :"Qinghai",64:"Ningxia",65:"Xinjiang",71:"Taiwan",81:"Hong Kong",82:"Macau",91:"Foreign"};
    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 'Illegal ID';
    if(city[ID.substr(0,2)] === undefined) return "Illegal region";
    if(time >= currentTime || birthday !== newBirthday) return 'illegal birthday';
    for(i=0; i<17; i++) {
      sum += ID.substr(i, 1) * arrInt[ i];
    }
    residue = arrCh[sum % 11];
    if (residue !== ID.substr(17, 1)) return 'Illegal ID';
 
    return city[ID.substr(0,2)]+" ,"+birthday+","+(ID. substr(16,1)%2?" 男":"女")
  }
</script>

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326447074&siteId=291194637