第18位校验码生成标准

链接如下:

http://qyj.saic.gov.cn/wjfb/201509/t20150929_162430.html

第17位效验码生成文档
链接如下:
http://www.doc88.com/p-334768906907.html
代码算法如下:传递一个16位的字符串即可:
   
  1. import java.util.LinkedHashMap;
  2. import java.util.Map;
  3. import java.util.Map.Entry;
  4. /**
  5. *
  6. * @author Alan
  7. * 2016年10月12日 下午5:05:52
  8. * 注释:校验码生成工具类
  9. */
  10. public class ValidCodeUtil {
  11. /**
  12. * 获取校验码
  13. * @param str 16位字符串
  14. * @return 18位校验码
  15. */
  16. public static String getValidCode(String str){
  17. if(str.length() == 16){
  18. //1.通过传递过来的16位字符串获取第17位编码
  19. String string = str.substring(8, str.length());
  20. String num17 = getNum17(string);
  21. str += num17;
  22. //2.通过上面的17位字符串算出第18位编码
  23. String num18 = getNum18(str);
  24. str += num18;
  25. }
  26. return str;
  27. }
  28. /**
  29. * 获取第17位字符
  30. * @param str 16位长度的字符串
  31. * @return 第17位字符
  32. */
  33. private static String getNum17(String str){
  34. int[] w = {3,7,9,10,5,8,4,2};//8位加权因子数组 , 传递进来的字符串参数为8位 , 从0到7分别代表一个整型值
  35. //该集合存放熊0-9,A-Z所对应的整型值
  36. Map<String, Integer> machineNumMap = new LinkedHashMap<>();
  37. for(int i = 0 ; i < 10 ; i++){
  38. machineNumMap.put(String.valueOf(i), i);
  39. }
  40. String ascii = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  41. char[] bigWord = ascii.toCharArray();
  42. int num = 10;
  43. for(char c : bigWord){
  44. machineNumMap.put(String.valueOf(c), num++);
  45. }
  46. //算法开始计算 , 获取总和
  47. char[] charArray = str.toCharArray();
  48. int sum = 0;
  49. for(int i = 0 ; i < charArray.length ; i++){
  50. sum += w[i] * machineNumMap.get(String.valueOf(charArray[i]));
  51. }
  52. //当总和除以11余数为1时第9位校验码为X , 余数为0是校验码为0
  53. int nine = sum % 11;
  54. String nineStr = "";
  55. if(nine == 1){
  56. nineStr = "X";
  57. }else if(nine == 0){
  58. nineStr = "0";
  59. }else{
  60. nineStr = String.valueOf(11-nine);
  61. }
  62. return nineStr;
  63. }
  64. /**
  65. * 获取第18位字符
  66. * @param str 17位长度的字符串
  67. * @return 第18位字符
  68. */
  69. private static String getNum18(String str) {
  70. int[] w = {1,2,9,27,19,26,16,17,20,29,25,13,8,24,10,30,28};//17位加权因子数组 , 传递进来的字符串参数为17位 , 从0到16分别代表一个整型值
  71. // 该集合存放熊0-9,A-Z所对应的整型值
  72. Map<String, Integer> machineNumMap = new LinkedHashMap<>();
  73. for (int i = 0; i < 10; i++) {
  74. machineNumMap.put(String.valueOf(i), i);
  75. }
  76. String ascii = "ABCDEFGHJKLMNPQRTUWXY";//没有IOZSV
  77. char[] bigWord = ascii.toCharArray();
  78. int num = 10;
  79. for (char c : bigWord) {
  80. machineNumMap.put(String.valueOf(c), num++);
  81. }
  82. // 算法开始计算 , 获取总和
  83. char[] charArray = str.toCharArray();
  84. int sum = 0;
  85. for (int i = 0; i < charArray.length; i++) {
  86. sum += w[i] * machineNumMap.get(String.valueOf(charArray[i]));
  87. }
  88. //当总和除以31余数为1时第9位校验码为Y , 余数为0是校验码为0
  89. int eightteen = sum % 31;
  90. String eighteenStr = "";
  91. if(eightteen == 1){
  92. eighteenStr = "Y";
  93. }else if(eightteen == 0){
  94. eighteenStr = "0";
  95. }else{
  96. for (Entry<String, Integer> entry : machineNumMap.entrySet()) {
  97. if(entry.getValue() == 31-eightteen-1){
  98. eighteenStr = entry.getKey();
  99. }
  100. }
  101. }
  102. return eighteenStr;
  103. }
  104. }

法人和其他组织统一社会信用代码编码规则,附有源代码相关推荐

  1. (五证合一)法人和其他组织统一社会信用代码编码规则

    PDF文档下载地址:http://download.csdn.net/detail/joke01/9339301 文档里面详细写明了统一社会信用代码(俗称五证合一)的编码规则和效验码计算规则.

  2. 组织机构代码和统一社会信用代码校验规则以及java校验工具类

    组织机构代码 编码规则编辑 1.全国组织机构代码由八位数字(或大写拉丁字母)本体代码和一位数字(或大写拉丁字母)校验码组成. 本体代码采用系列(即分区段)顺序编码方法. 校验码按照以下公式计算: C9 ...

  3. 统一社会信用代码的编码格式以及js正则校验

    统一社会信用代码 统一社会信用代码正则:/^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/ // 返回值为true或false functio ...

  4. Python实现统一社会信用代码合法性校验

    Python实现统一社会信用代码合法性校验 1 统一代码的构成 1.1 结构 ​ 统一代码由十八位的阿拉伯数字或大写英文字母(不使用I.O.Z.S.V)组成,包括第1位登记管理部门代码.第2位机构类别 ...

  5. JS校验统一社会信用代码的真实性

    统一代码的构成 结构 代码及说明 统一社会信用代码来源字符与数值对应关系表 统一社会信用代码相应顺序上对应的加权因子 计算示例 js代码实现 统一社会信用代码:每一个法人和其他组织在全国范围内唯一的. ...

  6. 精准准确的统一社会信用代码正则(js)

    参照标准: <GB_32100-2015_法人和其他组织统一社会信用代码编码规则.> 按照编码规则: 统一代码为18位,统一代码由十八位的数字或大写英文字母(不适用I.O.Z.S.V)组成 ...

  7. JS实现统一社会信用代码的效验(组织机构代码效验)

    参考原文https://blog.csdn.net/hdhxby/article/details/56015370 部分错误,修改整合了下 想查询数据的,请点击:统一信用代码查询地址 查看效验规则点击 ...

  8. java、正则表达式、php校验“统一社会信用代码”

    java import java.util.HashMap; import java.util.Map; /** * Desc: 社会信用代码证 检验 * Created  2016/5/18. */ ...

  9. 计算统一社会信用代码的校验码(Lua)

    输入 法人和其他组织统一社会信用代码的前16/17位 输出 检查登记管理部门代码(第1位)和机构类别代码(第2位)是否合法: 检查登记管理机关行政区划码(第3-8位)是否合法: 检查组织机构代码的本体 ...

最新文章

  1. NLLLoss CrossEntropyLoss Pytorch
  2. 三、在应用中升级----网络编程部分
  3. java输入流读取几行文本_Java基础笔记Day_16
  4. ios开发基础之通讯录系统实战-20
  5. java druid jdbc例子_JDBC【使用Druid连接数据库,DBUtils工具类的使用】
  6. [react] react中你用过哪些第三方的中间件
  7. 利用anaconda prompt打开jupyter notebook
  8. C#组件系列——又一款Excel处理神器Spire.XLS,你值得拥有
  9. Android 系统(253)----如何修改google libphonenumber的meta data (号码归属地,紧急号码列表,号码格式)
  10. 中国双氢青蒿素市场趋势报告、技术动态创新及市场预测
  11. 是逻辑运算符 java_跟我学java编程—Java逻辑运算符
  12. Hadoop namenode无法启动问题解决
  13. Android开发网络连接超时
  14. 【方太】顺利通过CMMI3认证
  15. 什么是JSONP及其实现原理
  16. HTML+CSS+JS实现 ❤️3D旋转魔方图片相册特效❤️
  17. 【Fuzzy】模糊专家系统(1)
  18. 换计算机硬盘分区,笔记本提速,换硬盘,分区,系统迁移,装机!
  19. Vue2父传子、子传父和兄弟间互传
  20. Jabber 技 术 概 况

热门文章

  1. 欧格电商:商家延迟发货有什么影响
  2. JSON Parse error:Unrecognized token xxx
  3. SCAU 2018新生赛 初出茅庐 全题解
  4. 2021-12-23 网工基础(十四) 链路聚合的两种模式、堆叠、集群、IP路由基础
  5. python如何输入乘法运算定律_人教版小学四年级数学下册第三单元乘法运算定律(附答案)...
  6. Android动画特效第二弹——QQ聊天彩蛋蹦蹦哒
  7. PDF可以通过OCR图文识别软件转换为JPEG图像吗
  8. 互联网晚报| 8月18日|未婚已育女性办理生育津贴不需要结婚证;拼多多将上线跨境电商平台;小米汽车将采用宁德时代麒麟和比亚迪刀片...
  9. jmeter 5.5+influxdb 2.0+grafana v9.3.2 - 压测看板setup
  10. 刷脸支付:一场输不起的战役