统一社会信用代码、纳税人识别号验证规则
/**
* 统一社会信用代码、纳税人识别号验证规则
* unified social credit identifier check
* 参考:
* GB 32100-2015
* GB 32100-2015《法人和其他组织统一社会信用代码编码规则》国家标准第1号修改单
* GB 11714-1997
*
* 其他:如果需要的话,可以自行增加对地区编码的校验,位于第3-8位上
*/
function check(code){
const regx = /^((1[1239])|(2[19])|(3[123459])|(4[19])|(5[1239])|(6[129])|(7[129])|(8[19])|(9[123])|(A[19])|(N[1239])|(Y1))\d{6}[0-9A-Z]{9}[0-9A-Y]$/
if(!regx.test(code)){return false;}
const map = ['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 checkCode = 11-code.substring(8,16).split('').map(x=>['0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N',
'O','P','Q','R','S','T','U','V','W','X','Y','Z']
.indexOf(x))
.reduce((a,b,i)=>a+b*([3,7,9,10,5,8,4,2][i]),0) % 11;
checkCode = checkCode===11?'X':checkCode.toString();
if(checkCode != code[16]){return false;}
checkCode = 31 - code.substring(0,17).split('')
.map(x=>map.indexOf(x))
.reduce((a,b,i)=>a+b*((3**i)%31),0) % 31;
checkCode = map[checkCode];
return checkCode == code[17];
}
升级后的代码
/**
* desc 社会统一信用代码、纳税人识别号验证
* 统一社会信用代码算法解析: 其实整个算法只是为了对比最后一位数是否正确
1.声明一个数组(加权因子)以下是数组的元素 1,3, 9,27,19,26,16,17,20,29,25,13,8,24,10,30,28
2.声明一个0-9A-Z(权重) 没有I、O、S、V、Z的字符串变量str
3.对传进来的统一社会信用代码进行遍历
1).取传进来的统一社会信用代码第一位到第十七位循环取
2)在变量str中检索上面取到的元素值在str的位置下标
3)计算每一次权重与加权因子相乘之和
4.权重与加权因子相乘之和除以31求余,31再减去这个余数获得一个值
5.判断这个值是否等于31,如果相等将这个值重新赋值为0
6.声明一个0-9A-Z(权重) 没有I、O、S、V、Z 中间已",“隔开的字符串
7.以这个字符串按照”,"分割成数组 (其实可以直接声明成数组)
8.再以上面计算获取的值作为下标获取该数组中的一个元素
9.再获取传进来的统一社会信用代码的最后一位
10.判断统一社会信用代码的最后一位和从数组中获取的值进行对比,相等就是正确的
* @param str $code
* @return boolean
*/
function isCompanyCode($code)
{
$patrn = "/^[0-9A-Z]+$/"; //18位校验及大写校验
if (strlen($code) != 18 || preg_match($patrn, $code) == false) {
return false;
}
$ancode; //统一社会信用代码的每一个值
$ancodevalue; //统一社会信用代码每一个值的权重
$total = 0;
$weightedfactors = array(1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28); //加权因子
$str = "0123456789ABCDEFGHJKLMNPQRTUWXY"; //不用I、O、S、V、Z
for ($i = 0; $i < strlen($code) - 1; $i++) {
$ancode = substr($code, $i, 1);
if (in_array($ancode, ["I", "O", "S", "Z", "V"])) {
return false;
}
$ancodeValue = strpos($str, $ancode);
$total = $total + $ancodeValue * $weightedfactors[$i]; //权重与加权因子相乘之和
}
$logiccheckcode = 31 - ($total % 31);
if ($logiccheckcode == 31) {
$logiccheckcode = 0;
}
$weightStr = "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";
$weightArray = explode(",", $weightStr);
$logiccheckcode = $weightArray[$logiccheckcode];
$checkcode = substr($code, 17, 18);
if ($logiccheckcode != $checkcode) {
return false;
}
return true;
}
统一社会信用代码、纳税人识别号验证规则相关推荐
- 正则表达式验证手机号码、身份证号码、邮箱、统一社会信用代码/营业执照号
1. 验证手机号码 /^1[3456789]\d{9}$/ 2. 验证身份证号码 /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[ ...
- JAVA、PHP身份证、统一社会信用代码算法解析验证
JAVA.PHP身份证算法解析验证 JAVA身份证号算法解析验证(待更新) JAVA统一社会信用代码算法解析验证(待更新) PHP统一社会信用代码算法解析验证 JAVA.PHP身份证算法解析: 其实上 ...
- JAVA、PHP统一社会信用代码、身份证号算法解析验证
JAVA.PHP统一社会信用代码.身份证号算法解析验证 这是给某机关单位写系统的时候要验证统一社会信用代码用的是PHP写的方法 java的话也是同理有时间我再把java代码贴出来,这就先贴PHP JA ...
- ASP.NET 中验证的自定义返回和统一社会信用代码的内置验证实现
目录 项目演示 创建项目 创建用户注册信息接收类 创建测试 Controller 执行测试 统一错误返回 自定义验证规则 验证规则介绍 编码实现 最后 References 本文介绍 ASP.NET ...
- 统一社会信用代码 正则验证
统一社会信用代码C#正则验证 [1-9A-GY]{1}[1239]{1}[1-5]{1}[0-9]{5}[0-9A-Z]{10} 转载于:https://www.cnblogs.com/Qos8/p/ ...
- JS校验统一社会信用代码的真实性
统一代码的构成 结构 代码及说明 统一社会信用代码来源字符与数值对应关系表 统一社会信用代码相应顺序上对应的加权因子 计算示例 js代码实现 统一社会信用代码:每一个法人和其他组织在全国范围内唯一的. ...
- 使用Java校验【统一社会信用代码】真假
统一社会信用代码校验规则: 定义一个方法判断统一社会信用代码真假: /*** 验证机构代码真假** @param orgCode 组织机构信用代码* @return 真返回true 假返回false* ...
- 使用Java校验【统一社会信用代码】的真假
统一社会信用代码是营业执照注册号.这个是三证合一,一证一码的工商改革结果. 定义一个方法判断统一社会信用代码真假: /*** 验证机构代码真假** @param orgCode 组织机构信用代码* ...
- 小程序正则验证 身份证号、统一社会信用代码
公共方法封装 // util.js页面,封装的公共方法/*** 去掉字符串头尾空格*/ function trim(str) {return str.replace(/(^\s*)|(\s*$)/g, ...
- 身份证号与统一社会信用代码的校验
身份证号与统一社会信用代码的表单校验 一.校验身份证号 <el-form ref="form" :model="form" :rules="ru ...
最新文章
- python 将列和索引的值变换_【编辑小组成长日记】Python学习第二期
- 【C++】复制构造函数
- python和shell哪个快_有没有可能让这个shell脚本更快?
- 先有鸡还是先有蛋?--IT公司用人困惑
- 微信小程序的z-index在苹果ios无效
- 2021年全球知名开源项目大更新
- Lecture 20 Parallel Algorithms I
- 【转】2.3SharePoint服务器端对象模型 之 访问网站和列表数据(Part 3)
- c语言 结构体_颖儿教你学C语言结构体,全面讲解,让程序小白玩转结构体编程...
- listview的item中嵌套多个EditText时的问题
- mysql-使用存储过程一次性批量创建多张表
- JSR-303 数据校验学习
- Unable to load print control in ReportingService
- 如何理解 if __name__ == “__main__“:
- 学游戏设计要什么学历_东莞模具设计培训学模具技术有什么好处为什么学模具技术...
- 数组指针和指针数组的区别(转)
- 遗传算法优化神经网络—MATLAB实现
- 渗透测试工具——Metasploit
- 2021年《职业防治法》宣传周活动资料海报挂图及职业病知识小手册等
- Linux转发性能评估与优化(转发瓶颈分析与解决方案)