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

统一社会信用代码规则

  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位校验码,按照公式计算得出;

代码

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位的校验码。

国标摘要

统一代码由十八位的阿拉伯数字或大写英文字母(不使用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/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值