统一社会信用代码规则
- 由18位的阿拉伯数字或大写英文字母(不使用I、O、Z、S、V)组成;
第1位~第2位、第9位~第18位
[0-9A-HJ-NP-RT-UW-Y]
- 第3位~第8位,由阿拉伯数字表示;
[0-9]{6}
- 第18位校验码,按照公式计算得出;
代码
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;}// 如果是宽松校验,此时返回trueif(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)); // trueconsole.log(isUnifiedSocialCreditCode(xiaMen)); // false
console.log(isUnifiedSocialCreditCode(xiaMen, true)); // true
异常
按照国标,校验《厦门云上晴空航空科技有限公司》公司的信用码91350211M0000XUF46,但是校验不通过。因此引入宽松校验,宽松校验不校验第18位的校验码。
国标摘要
统一代码由十八位的阿拉伯数字或大写英文字母(不使用I、O、Z、S、V)组成,包括第一位等级管理部门代码、第2位机构类别代码、第3位~第8位登记管理机关行政区划码、第9位-第17位主体标志码、第18位校验码五个部分。
代码序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
代码 | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x |
说明 | 登记管理部门代码1位 | 机构类别代码1位 | 登记管理机关行政区划码6位 | 主体标识码(组织机构代码)9位 | 校验码1位 | |||||||||||||
规则 | 数字或者大写英文字母 | 数字 | 数字或者大写英文字母 |
代码字符集:
0~9 | A | B | C | D | E | F | G | H | J | K | L | M | N | P | Q | R | T | U | W | X | Y |
0~9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
参考资料
国标在线https://www.samr.gov.cn/djzcj/zyfb/zjfb/201612/t20161208_282195.html
📎GB 32100-2015 法人和其他组织统一社会信用代码编码规则.pdfhttps://www.yuque.com/attachments/yuque/0/2023/pdf/2394966/1681973967896-78c62bcd-d95b-4108-9924-7bb626bb5950.pdf
企查查https://www.qcc.com/
全国组织机构统一社会信用代码查询平台https://www.cods.org.cn/