js校验《GB 32100-2015 法人和其他组织统一社会信用代码编码规则》

GB 32100-2015 是中国国家标准,规定了法人和其他组织的统一社会信用代码(Unified Social Credit Code, USCCode)的编码规则。该标准确保了各类法人和其他组织在全国范围内具有唯一、统一的身份标识。以下是 GB 32100-2015 编码规则的主要内容:

统一社会信用代码结构

统一社会信用代码由 18 位字符 组成,具体结构如下:

  1. 第1位:登记管理部门代码

    • 1:机构编制部门
    • 2:民政部门
    • 3:工商部门
    • 4:其他部门
    • 5:事业单位
    • 6:社会组织
    • 7:企业
    • 8:个体工商户
    • 9:农民专业合作社
  2. 第2位:机构类别代码

    • 根据不同登记管理部门的具体分类,例如:
      • 工商部门:1 表示企业法人,2 表示非企业法人等。
  3. 第3-8位:登记管理机关行政区划代码

    • 使用国家统计局发布的《中华人民共和国行政区划代码》中的六位数字表示。
  4. 第9-17位:主体标识码(组织机构代码)

    • 这是原组织机构代码证上的 9 位数字或字母,用于唯一标识一个组织。
    • 字母范围为 [0-9A-HJ-NPQRTUWXY],排除了易混淆的字母如 I, O, S 等。
  5. 第18位:校验码

    • 校验码是根据前 17 位字符计算得出的一个字符,可以是数字或字母 [0-9A-Z],用于验证整个代码的正确性。

示例

假设有一个企业的统一社会信用代码为 91310115MA1H8R7C6D,其含义如下:

  • 第1位:9 表示企业
  • 第2位:1 表示企业法人
  • 第3-8位:310115 表示上海市浦东新区
  • 第9-17位:MA1H8R7C6 是该企业的主体标识码
  • 第18位:D 是校验码

正则表达式验证

你可以使用以下正则表达式来验证符合 GB 32100-2015 规范的统一社会信用代码:

^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{9}[0-9A-Z]$

解释:

  • 前两位 [0-9A-HJ-NPQRTUWXY]{2} 包括登记管理部门代码和机构类别代码。
  • 接下来的六位 \d{6} 是登记管理机关行政区划代码。
  • 再接下来的九位 [0-9A-HJ-NPQRTUWXY]{9} 是主体标识码。
  • 最后一位 [0-9A-Z] 是校验码。

JavaScript 验证示例

在 JavaScript 中,你可以使用以下代码来验证统一社会信用代码:

const regex = /^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{9}[0-9A-Z]$/;

function validateUSCCode(code) {
   
    return regex.test(code);
}

// 示例调用
console.log(validateUSCCode("91310115MA1H8R7C6D")); // true 或 false

根据 GB 32100-2015 标准,第18位校验码的计算方法较为复杂。校验码是通过前17位字符按照特定的加权规则计算得出的。以下是详细的校验码计算步骤:

校验码计算步骤

  1. 定义加权因子

    • 前17位字符的加权因子分别为:1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28
  2. 字符到数字的映射

    • 字符 [0-9A-HJ-NPQRTUWXY] 对应的数字值如下:
      0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
      0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
      A  B  C  D  E  F  G  H  J  K  L  M  N  P  Q  R  T  U  W  X  Y
      10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
      
  3. 计算加权和

    • 将前17位字符转换为对应的数字值,然后乘以对应的加权因子,求和。
    • 例如,对于代码 91310115MA1H8R7C6D
      • 9 对应 9,加权因子为 1,贡献值为 9 * 1 = 9
      • 1 对应 1,加权因子为 3,贡献值为 1 * 3 = 3
      • 3 对应 3,加权因子为 9,贡献值为 3 * 9 = 27
      • 1 对应 1,加权因子为 27,贡献值为 1 * 27 = 27
      • 0 对应 0,加权因子为 19,贡献值为 0 * 19 = 0
      • 1 对应 1,加权因子为 26,贡献值为 1 * 26 = 26
      • 1 对应 1,加权因子为 16,贡献值为 1 * 16 = 16
      • 5 对应 5,加权因子为 17,贡献值为 5 * 17 = 85
      • M 对应 22,加权因子为 20,贡献值为 22 * 20 = 440
      • A 对应 10,加权因子为 29,贡献值为 10 * 29 = 290
      • 1 对应 1,加权因子为 25,贡献值为 1 * 25 = 25
      • H 对应 17,加权因子为 13,贡献值为 17 * 13 = 221
      • 8 对应 8,加权因子为 8,贡献值为 8 * 8 = 64
      • R 对应 25,加权因子为 24,贡献值为 25 * 24 = 600
      • 7 对应 7,加权因子为 10,贡献值为 7 * 10 = 70
      • C 对应 12,加权因子为 30,贡献值为 12 * 30 = 360
      • 6 对应 6,加权因子为 28,贡献值为 6 * 28 = 168
    • 总和为:9 + 3 + 27 + 27 + 0 + 26 + 16 + 85 + 440 + 290 + 25 + 221 + 64 + 600 + 70 + 360 + 168 = 2611
  4. 计算校验码

    • 用总和除以 31,取余数。

    • 2611 % 31 = 10

    • 根据余数找到对应的校验码字符:

      0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
      0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
      A  B  C  D  E  F  G  H  J  K  L  M  N  P  Q  R  T  U  W  X  Y
      10 11 12 13 14 15 16 17 18 19 20 21 22 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huingymm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值