前端校验统一社会信用代码
统一社会信用代码规则
- 由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
前端校验统一社会信用代码相关推荐
- JS校验统一社会信用代码的真实性
统一代码的构成 结构 代码及说明 统一社会信用代码来源字符与数值对应关系表 统一社会信用代码相应顺序上对应的加权因子 计算示例 js代码实现 统一社会信用代码:每一个法人和其他组织在全国范围内唯一的. ...
- java、正则表达式、php校验“统一社会信用代码”
java import java.util.HashMap; import java.util.Map; /** * Desc: 社会信用代码证 检验 * Created 2016/5/18. */ ...
- Python实现统一社会信用代码校验(GB32100-2015)
Python实现统一社会信用代码校验 统一社会信用代码国标校验 统一社会信用代码国标校验规则 示例说明 Python代码实现(仅实现GB- 32100-2015中的规则) 统一社会信用代码国标校验 ...
- 身份证号与统一社会信用代码的校验
身份证号与统一社会信用代码的表单校验 一.校验身份证号 <el-form ref="form" :model="form" :rules="ru ...
- JAVA生成统一社会信用代码和组织机构代码
统一社会信用代码规则如下: 代码如下: 引入jar包下载:https://mvnrepository.com/artifact/cn.hutool/hutool-all/5.8.3 package c ...
- 统一社会信用代码的编码格式以及js正则校验
统一社会信用代码 统一社会信用代码正则:/^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/ // 返回值为true或false functio ...
- JAVA 身份证校验与统一社会信用代码校验
B话少说,上代码 原理默认大家都懂了,不懂的话可以百度一下 package com.microlinktech.rns.util;import lombok.Getter; import lombok ...
- Python实现统一社会信用代码合法性校验
Python实现统一社会信用代码合法性校验 1 统一代码的构成 1.1 结构 统一代码由十八位的阿拉伯数字或大写英文字母(不使用I.O.Z.S.V)组成,包括第1位登记管理部门代码.第2位机构类别 ...
- 使用Java校验【统一社会信用代码】真假
统一社会信用代码校验规则: 定义一个方法判断统一社会信用代码真假: /*** 验证机构代码真假** @param orgCode 组织机构信用代码* @return 真返回true 假返回false* ...
最新文章
- 用Java实现单向链表
- SOCKET是调用操作系统通信服务的一种机制
- vscode中文设置不生效_VSCode详细安装教程
- C/C++ 进程的探索(fork函数)
- 408计算机先学哪个,408计算机统考各科难度分析
- matlab 图像常用函数
- Web前端三大主流框架是什么?Web前端前景与就业形势
- cownew开源-cownewStudio抢先预览
- 一纬度横直线等于多公里_【高中物理】必修一知识点总结
- 泊松分布的期望和方差推导
- Hadoop培训视频教程
- CSS中的四种定位以及top和margin-top的区别
- [prometheus]Step11-prometheus动态监控服务器端口并告警
- 蚂蚁金服上市估值2k亿美金!会开发到底有多吃香?
- Word2Vec词向量模型代码
- 如何向公众号添加的文档的链接
- 亚马逊FBA标签打印技巧(深圳风火轮amazon团队)
- 菜鸟的经历和今后目标
- 5G的NSA和SA,到底啥意思?
- php nts,wamp 环境中的nts php 配置方式