法人和其他组织统一社会信用代码编码规则,附有源代码
第18位校验码生成标准
链接如下:
http://qyj.saic.gov.cn/wjfb/201509/t20150929_162430.html
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
/**
*
* @author Alan
* 2016年10月12日 下午5:05:52
* 注释:校验码生成工具类
*/
public class ValidCodeUtil {
/**
* 获取校验码
* @param str 16位字符串
* @return 18位校验码
*/
public static String getValidCode(String str){
if(str.length() == 16){
//1.通过传递过来的16位字符串获取第17位编码
String string = str.substring(8, str.length());
String num17 = getNum17(string);
str += num17;
//2.通过上面的17位字符串算出第18位编码
String num18 = getNum18(str);
str += num18;
}
return str;
}
/**
* 获取第17位字符
* @param str 16位长度的字符串
* @return 第17位字符
*/
private static String getNum17(String str){
int[] w = {3,7,9,10,5,8,4,2};//8位加权因子数组 , 传递进来的字符串参数为8位 , 从0到7分别代表一个整型值
//该集合存放熊0-9,A-Z所对应的整型值
Map<String, Integer> machineNumMap = new LinkedHashMap<>();
for(int i = 0 ; i < 10 ; i++){
machineNumMap.put(String.valueOf(i), i);
}
String ascii = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char[] bigWord = ascii.toCharArray();
int num = 10;
for(char c : bigWord){
machineNumMap.put(String.valueOf(c), num++);
}
//算法开始计算 , 获取总和
char[] charArray = str.toCharArray();
int sum = 0;
for(int i = 0 ; i < charArray.length ; i++){
sum += w[i] * machineNumMap.get(String.valueOf(charArray[i]));
}
//当总和除以11余数为1时第9位校验码为X , 余数为0是校验码为0
int nine = sum % 11;
String nineStr = "";
if(nine == 1){
nineStr = "X";
}else if(nine == 0){
nineStr = "0";
}else{
nineStr = String.valueOf(11-nine);
}
return nineStr;
}
/**
* 获取第18位字符
* @param str 17位长度的字符串
* @return 第18位字符
*/
private static String getNum18(String str) {
int[] w = {1,2,9,27,19,26,16,17,20,29,25,13,8,24,10,30,28};//17位加权因子数组 , 传递进来的字符串参数为17位 , 从0到16分别代表一个整型值
// 该集合存放熊0-9,A-Z所对应的整型值
Map<String, Integer> machineNumMap = new LinkedHashMap<>();
for (int i = 0; i < 10; i++) {
machineNumMap.put(String.valueOf(i), i);
}
String ascii = "ABCDEFGHJKLMNPQRTUWXY";//没有IOZSV
char[] bigWord = ascii.toCharArray();
int num = 10;
for (char c : bigWord) {
machineNumMap.put(String.valueOf(c), num++);
}
// 算法开始计算 , 获取总和
char[] charArray = str.toCharArray();
int sum = 0;
for (int i = 0; i < charArray.length; i++) {
sum += w[i] * machineNumMap.get(String.valueOf(charArray[i]));
}
//当总和除以31余数为1时第9位校验码为Y , 余数为0是校验码为0
int eightteen = sum % 31;
String eighteenStr = "";
if(eightteen == 1){
eighteenStr = "Y";
}else if(eightteen == 0){
eighteenStr = "0";
}else{
for (Entry<String, Integer> entry : machineNumMap.entrySet()) {
if(entry.getValue() == 31-eightteen-1){
eighteenStr = entry.getKey();
}
}
}
return eighteenStr;
}
}
法人和其他组织统一社会信用代码编码规则,附有源代码相关推荐
- (五证合一)法人和其他组织统一社会信用代码编码规则
PDF文档下载地址:http://download.csdn.net/detail/joke01/9339301 文档里面详细写明了统一社会信用代码(俗称五证合一)的编码规则和效验码计算规则.
- 组织机构代码和统一社会信用代码校验规则以及java校验工具类
组织机构代码 编码规则编辑 1.全国组织机构代码由八位数字(或大写拉丁字母)本体代码和一位数字(或大写拉丁字母)校验码组成. 本体代码采用系列(即分区段)顺序编码方法. 校验码按照以下公式计算: C9 ...
- 统一社会信用代码的编码格式以及js正则校验
统一社会信用代码 统一社会信用代码正则:/^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/ // 返回值为true或false functio ...
- Python实现统一社会信用代码合法性校验
Python实现统一社会信用代码合法性校验 1 统一代码的构成 1.1 结构 统一代码由十八位的阿拉伯数字或大写英文字母(不使用I.O.Z.S.V)组成,包括第1位登记管理部门代码.第2位机构类别 ...
- JS校验统一社会信用代码的真实性
统一代码的构成 结构 代码及说明 统一社会信用代码来源字符与数值对应关系表 统一社会信用代码相应顺序上对应的加权因子 计算示例 js代码实现 统一社会信用代码:每一个法人和其他组织在全国范围内唯一的. ...
- 精准准确的统一社会信用代码正则(js)
参照标准: <GB_32100-2015_法人和其他组织统一社会信用代码编码规则.> 按照编码规则: 统一代码为18位,统一代码由十八位的数字或大写英文字母(不适用I.O.Z.S.V)组成 ...
- JS实现统一社会信用代码的效验(组织机构代码效验)
参考原文https://blog.csdn.net/hdhxby/article/details/56015370 部分错误,修改整合了下 想查询数据的,请点击:统一信用代码查询地址 查看效验规则点击 ...
- java、正则表达式、php校验“统一社会信用代码”
java import java.util.HashMap; import java.util.Map; /** * Desc: 社会信用代码证 检验 * Created 2016/5/18. */ ...
- 计算统一社会信用代码的校验码(Lua)
输入 法人和其他组织统一社会信用代码的前16/17位 输出 检查登记管理部门代码(第1位)和机构类别代码(第2位)是否合法: 检查登记管理机关行政区划码(第3-8位)是否合法: 检查组织机构代码的本体 ...
最新文章
- NLLLoss CrossEntropyLoss Pytorch
- 三、在应用中升级----网络编程部分
- java输入流读取几行文本_Java基础笔记Day_16
- ios开发基础之通讯录系统实战-20
- java druid jdbc例子_JDBC【使用Druid连接数据库,DBUtils工具类的使用】
- [react] react中你用过哪些第三方的中间件
- 利用anaconda prompt打开jupyter notebook
- C#组件系列——又一款Excel处理神器Spire.XLS,你值得拥有
- Android 系统(253)----如何修改google libphonenumber的meta data (号码归属地,紧急号码列表,号码格式)
- 中国双氢青蒿素市场趋势报告、技术动态创新及市场预测
- 是逻辑运算符 java_跟我学java编程—Java逻辑运算符
- Hadoop namenode无法启动问题解决
- Android开发网络连接超时
- 【方太】顺利通过CMMI3认证
- 什么是JSONP及其实现原理
- HTML+CSS+JS实现 ❤️3D旋转魔方图片相册特效❤️
- 【Fuzzy】模糊专家系统(1)
- 换计算机硬盘分区,笔记本提速,换硬盘,分区,系统迁移,装机!
- Vue2父传子、子传父和兄弟间互传
- Jabber 技 术 概 况
热门文章
- 欧格电商:商家延迟发货有什么影响
- JSON Parse error:Unrecognized token xxx
- SCAU 2018新生赛 初出茅庐 全题解
- 2021-12-23 网工基础(十四) 链路聚合的两种模式、堆叠、集群、IP路由基础
- python如何输入乘法运算定律_人教版小学四年级数学下册第三单元乘法运算定律(附答案)...
- Android动画特效第二弹——QQ聊天彩蛋蹦蹦哒
- PDF可以通过OCR图文识别软件转换为JPEG图像吗
- 互联网晚报| 8月18日|未婚已育女性办理生育津贴不需要结婚证;拼多多将上线跨境电商平台;小米汽车将采用宁德时代麒麟和比亚迪刀片...
- jmeter 5.5+influxdb 2.0+grafana v9.3.2 - 压测看板setup
- 刷脸支付:一场输不起的战役