目录

前端校验统一社会信用代码

前端校验统一社会信用代码

统一社会信用代码规则

  1. 由18位的阿拉伯数字或大写英文字母(不使用I、O、Z、S、V)组成;

    第1位第2位、第9位第18位

    [0-9A-HJ-NP-RT-UW-Y]
  2. 第3位~第8位,由阿拉伯数字表示;

    [0-9]{6}
  3. 第18位校验码,按照公式计算得出;

    https://i-blog.csdnimg.cn/blog_migrate/00973f8fcbba2c29ddfc85dacc9c7cdb.png

代码

function isUnifiedSocialCreditCode(code, loose=false){
  if(!code || code.length !== 18) return false;

  // 正则:1-2位=>数字或者字母;3-8位=>数字;9-18位=>数字或者字母
  const pattern = /^([0-9A-HJ-NP-RT-UW-Y]){2}([0-9]){6}([0-9A-HJ-NP-RT-UW-Y]{10})$/;
  if(!pattern.test(code)){
    return false;
  }
  // 如果是宽松校验,此时返回true
  if(loose){
    return true;
  }
  // 严格校验,开始校验第18位的校验码
  let code17 = code.substr(0,17); // 截取前17位
  let code18 = code.substr(17,1); // 第18位校验码
  
  // 加权因子
  const WEIGHT_FACTORS = [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28];
  // 字符集,数组下标表示数值
  const CHARACTER_SET = ['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'];
  // 求和
  let codeList = code17.split('');
  let sum = 0;
  codeList.forEach((ele, i)=>{
    let index = CHARACTER_SET.findIndex(row=>row==ele);
    sum += (index * WEIGHT_FACTORS[i])
  })
  // 求余数
  let MOD = sum%31;
  // 求校验码
  let checkCode = CHARACTER_SET[31 - MOD];
  return checkCode == code18
}

let codeQuJuDe = '91110000101623741K'; // 测试全聚德信用码
let changFengHospital = '911101066976941872'; // 测试北京长峰医院信用码
let xiaMen = '91350211M0000XUF46'; // 厦门云上晴空航空科技有限公司,这个虽然是正常存在的,但是校验不通过


console.log(isUnifiedSocialCreditCode(codeQuJuDe)); // true
console.log(isUnifiedSocialCreditCode(changFengHospital)); // true

console.log(isUnifiedSocialCreditCode(xiaMen)); // false
console.log(isUnifiedSocialCreditCode(xiaMen, true)); // true

异常

按照国标,校验《厦门云上晴空航空科技有限公司》公司的信用码91350211M0000XUF46,但是校验不通过。因此引入宽松校验,宽松校验不校验第18位的校验码。

https://i-blog.csdnimg.cn/blog_migrate/2bdbe9f547b6c1930e23055a45c94570.png

国标摘要

统一代码由十八位的阿拉伯数字或大写英文字母(不使用I、O、Z、S、V)组成,包括第一位等级管理部门代码、第2位机构类别代码、第3位~第8位登记管理机关行政区划码、第9位-第17位主体标志码、第18位校验码五个部分。

代码序号123456789101112131415161718
代码xxxxxxxxxxxxxxxxxx
说明登记管理部门代码1位机构类别代码1位登记管理机关行政区划码6位主体标识码(组织机构代码)9位校验码1位
规则数字或者大写英文字母数字数字或者大写英文字母

https://i-blog.csdnimg.cn/blog_migrate/d14cfdf9874cb784da9df3e4b8d0fe48.png

https://i-blog.csdnimg.cn/blog_migrate/577bab00a7550a36b15a1d89256a1573.png

代码字符集:

0~9ABCDEFGHJKLMNPQRTUWXY
0~9101112131415161718192021222324252627282930

参考资料

[国标在线

https://i-blog.csdnimg.cn/blog_migrate/64d367beb016e45fdc8d8aaff940b313.png “国标在线”)

[📎GB 32100-2015 法人和其他组织统一社会信用代码编码规则.pdf

https://i-blog.csdnimg.cn/blog_migrate/64d367beb016e45fdc8d8aaff940b313.png “📎GB 32100-2015 法人和其他组织统一社会信用代码编码规则.pdf”)

[企查查

https://i-blog.csdnimg.cn/blog_migrate/64d367beb016e45fdc8d8aaff940b313.png “企查查”)

[全国组织机构统一社会信用代码查询平台

https://i-blog.csdnimg.cn/blog_migrate/64d367beb016e45fdc8d8aaff940b313.png “全国组织机构统一社会信用代码查询平台”)