js中统一社会信用代码校验规则

// 统一社会信用代码
  checkSocialCardNumber(value) {
    if (value == "") {
      return false;
    } else {
      var firstarray = [
        "0",
        "1",
        "2",
        "3",
        "4",
        "5",
        "6",
        "7",
        "8",
        "9",
        "A",
        "B",
        "C",
        "D",
        "E",
        "F",
        "G",
        "H",
        "I",
        "J",
        "K",
        "L",
        "M",
        "N",
        "O",
        "P",
        "Q",
        "R",
        "S",
        "T",
        "U",
        "V",
        "W",
        "X",
        "Y",
        "Z",
      ];
      var firstkeys = [3, 7, 9, 10, 5, 8, 4, 2];
      var secondarray = [
        "0",
        "1",
        "2",
        "3",
        "4",
        "5",
        "6",
        "7",
        "8",
        "9",
        "A",
        "B",
        "C",
        "D",
        "E",
        "F",
        "G",
        "H",
        "J",
        "K",
        "L",
        "M",
        "N",
        "P",
        "Q",
        "R",
        "T",
        "U",
        "W",
        "X",
        "Y",
      ];
      var secondkeys = [
        1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28,
      ];
      function calc(code, array1, array2, b) {
        var count = 0;
        for (var i = 0; i < array2.length; i++) {
          var a = code[i];
          count += array2[i] * array1.indexOf(a);
        }
        var remainder = count % b;
        return remainder === 0 ? 0 : b - remainder;
      }
      var code = value.toUpperCase();
      if (code.length != 18) {
        console.log(1);
        return false;
      }
      var reg = /^\w\w\d{6}\w{9}\w$/;
      if (!reg.test(code)) {
        console.log(2);
        return false;
      } else {
        /*
            登记管理部门代码:使用阿拉伯数字或大写英文字母表示。​
            机构编制:1​
            民政:5​
            工商:9​
            其他:Y
        */
        let reg1 = /^[1,5,9,Y]\w\d{6}\w{9}\w$/;
        if (!reg1.test(code)) {
          console.log(3);
          return false;
        } else {
          /*
            机构类别代码:使用阿拉伯数字或大写英文字母表示。​
            机构编制机关:11打头​​
            机构编制事业单位:12打头​
            机构编制中央编办直接管理机构编制的群众团体:13打头​​
            机构编制其他:19打头​
            民政社会团体:51打头​
            民政民办非企业单位:52打头​
            民政基金会:53打头​
            村民委员会:54打头
            民政其他:59打头​
            工商企业:91打头​
            工商个体工商户:92打头​
            工商农民专业合作社:93打头​
            其他:Y1打头​
        */
          let reg2 = /^(11|12|13|19|21|31|32|33|34|35|41|51|52|53|54|55|61|62|59|71|72|81|91|92|93|A1|G1|J1|N1|N2|N3|Y1)\d{6}\w{9}\w$/;
          if (!reg2.test(code)) {
            console.log(4);
            return false;
          } else {
            /*
                登记管理机关行政区划码:只能使用阿拉伯数字表示。按照GB/T 2260编码。​
                例如:四川省成都市本级就是510100;四川省自贡市自流井区就是510302。​
                */
            let reg3 = /^(11|12|13|19|21|31|32|33|34|35|41|51|52|53|54|55|61|62|59|71|72|81|91|92|93|A1|G1|J1|N1|N2|N3|Y1)\d{6}\w{9}\w$/;
            if (!reg3.test(code)) {
              console.log(5);
              return false;
            } else {
              var firstkey = calc(code.substr(8), firstarray, firstkeys, 11);
              var firstword;
              if (firstkey < 10) {
                firstword = firstkey;
              }
              if (firstkey == 10) {
                firstword = "X";
              } else if (firstkey == 11) {
                firstword = "0";
              }
              if (firstword != code.substr(16, 1)) {
                console.log(6);
                return false;
              }else {
                var secondkey = calc(code, secondarray, secondkeys, 31);
                var secondword = secondarray[secondkey];
                if (!secondword || secondword != code.substr(17, 1)) {
                  console.log(7);
                  return false;
                }else {
                    var word = code.substr(0, 16) + firstword + secondword;
                    if (code != word) {
                      console.log(8);
                      return false;
                    }else {
                      console.log(9);
                      return true
                    }
                }
              }
            }
          }
        }
      }
    }
  },

转载于:https://blog.csdn.net/Syracuse123_?type=blog
参考链接:https://www.lmlphp.com/user/57840/article/item/2658937/
https://www.hftfund.com/contents/2019/10/10-3c400690bdb34720a22ad68e22956601.html

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值