java 组织机构代码_JAVA实现社会统一信用代码校验的方法|chu
网上找了几个,写的都不太适合,有的写出来了,也没有给出参考的算法链接。这样就导致了如果产生错误我们无法排查(不懂原理怎么排查对吧)。
如果在使用过程中有疑虑,请参考:较验规则
package com.mengyunzhi.common.utils; import org.apache.commons.collections4.BidiMap; import org.apache.commons.collections4.bidimap.TreeBidiMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.validation.ValidationException; import java.util.Map; import java.util.Random; /** * 统一社会停用用代码 */ public interface UnifiedCreditCodeUtils { Logger logger = LoggerFactory.getLogger(UnifiedCreditCodeUtils.class); String baseCode = "0123456789ABCDEFGHJKLMNPQRTUWXY"; char[] baseCodeArray = baseCode.toCharArray(); int[] wi = {1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28}; /** * 生成供较验使用的 Code Map * * @return BidiMap */ static BidiMap generateCodes() { BidiMap codes = new TreeBidiMap<>(); for (int i = 0; i < baseCode.length(); i++) { codes.put(baseCodeArray[i], i); } return codes; } /** * 较验社会统一信用代码 * * @param unifiedCreditCode 统一社会信息代码 * @return 符合: true */ static boolean validateUnifiedCreditCode(String unifiedCreditCode) { if ((unifiedCreditCode.equals("")) || unifiedCreditCode.length() != 18) { return false; } Map codes = generateCodes(); int parityBit; try { parityBit = getParityBit(unifiedCreditCode, codes); } catch (ValidationException e) { return false; } return parityBit == codes.get(unifiedCreditCode.charAt(unifiedCreditCode.length() - 1)); } /** * 获取较验码 * * @param unifiedCreditCode 统一社会信息代码 * @param codes 带有映射关系的国家代码 * @return 获取较验位的值 */ static int getParityBit(String unifiedCreditCode, Map codes) { char[] businessCodeArray = unifiedCreditCode.toCharArray(); int sum = 0; for (int i = 0; i < 17; i++) { char key = businessCodeArray[i]; if (baseCode.indexOf(key) == -1) { throw new ValidationException("第" + String.valueOf(i + 1) + "位传入了非法的字符" + key); } sum += (codes.get(key) * wi[i]); } int result = 31 - sum % 31; return result == 31 ? 0 : result; } /** * 获取一个随机的统一社会信用代码 * * @return 统一社会信用代码 */ static String generateOneUnifiedCreditCode() { Random random = new Random(); StringBuilder buf = new StringBuilder(); for (int i = 0; i < 17; ++i) { int num = random.nextInt(baseCode.length() - 1); buf.append(baseCode.charAt(num)); } String code = buf.toString(); String upperCode = code.toUpperCase(); BidiMap codes = generateCodes(); int parityBit = getParityBit(upperCode, codes); if (codes.getKey(parityBit) == null) { logger.debug("生成社会统一信用代码不符合规则"); upperCode = generateOneUnifiedCreditCode(); } else { upperCode = upperCode + codes.getKey(parityBit); } return upperCode; } }
测试
package com.mengyunzhi.common.utils; import org.assertj.core.api.Assertions; import org.junit.Test; import static org.junit.Assert.*; public class UnifiedCreditCodeUtilsTest { @Test public void validateUnifiedCreditCode() { String code = "911310827965850580"; Assertions.assertThat(UnifiedCreditCodeUtils.validateUnifiedCreditCode(code)).isTrue(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持华域联盟。
java 组织机构代码_JAVA实现社会统一信用代码校验的方法|chu相关推荐
- java 组织机构代码_JAVA实现社会统一信用代码较验
网上找了几个,写的都不太适合,有的写出来了,也没有给出参考的算法链接.这样就导致了如果产生错误我们无法排查(不懂原理怎么排查对吧). 如果在使用过程中有疑虑,请参考:较验规则 代码实现 package ...
- java 组织机构代码_JAVA实现社会统一信用代码校验的方法
网上找了几个,写的都不太适合,有的写出来了,也没有给出参考的算法链接.这样就导致了如果产生错误我们无法排查(不懂原理怎么排查对吧). 如果在使用过程中有疑虑,请参考:较验规则 package com. ...
- java 社会统一信用代码分解,获取登记管理部门代码、机构类别代码、登记管理机关行政区划码、 主体标识码、校验码
问题描述: `提示:根据已有的社会统一信用编码,获取每个组成部分的内容 学习内容: 提示:这里需要说明一下,统一社会信用代码的构成 社会统一信用代码是由18位 阿拉伯数字或大写英文字母(不使用I.O. ...
- Python 生成、识别社会统一信用代码
三证合一之后,社会统一信用代码就是企业的身份证.也就是说只要你的程序涉及企业信息的录入,那就少不了社会统一信用代码的录入.这里分享一个工具,可以用 Python 来识别社会统一信用代码,也可以随机生成 ...
- Js中身份证验证及社会统一信用代码验证
二代身份证验证规则如下: //函数参数必须是字符串,因为二代身份证号码是十八位,而在javascript中,十八位的数值会超出计算范围,造成不精确的结果,导致最后两位和计算的值不一致,从而该函数出现错 ...
- oracle校验社会统一信用代码(菜J笔记)
今天下午花了一下午时间,查了很久百度,写了一个很菜的东西 如果有什么问题,欢迎各位大佬指出,直接上代码 统一社会信用代码编码规则-维基百科 身份证号码的编码规则及校验-简书 国家企业信用信息公示查询系 ...
- 手机号,身份证号,邮政编码,统一信用代码,发票抬头,纳税人识别号正则校验
手机号 phone(rule, value, callback) {const reg = /^[1][3,4,5,6.7,8,9][0-9]{9}$/if (!reg.test(value)) {c ...
- PHP验证统一信用代码
<?php /*** 判断是否为统一社会信用代码*/ function isCompanyCode($str){$one = '159Y';//第一位可以出现的字符$two = '12391'; ...
- java range(10)_Java 中的十个 ” 单行代码编程 ” ( OneLiner )
原标题:Java 中的十个 " 单行代码编程 " ( OneLiner ) 作者:飒然Hang 原文链接:www.rowkey.me/blog/2017/09/09/java-on ...
最新文章
- 初学Python常见异常错误,总有一处你会遇到!
- Struts2中Action之ResultType
- 【Flask项目】sqlalchemy原生sql查询,返回字典形式数据
- spark 1.4 编译
- postman 使用_Postman简单使用
- SDUT-保留整数 -
- ThinkPHP入门篇(一)
- Shell脚本笔记(二)Shell变量
- 3D VR卡镜的使用方法
- 为VSCode 设置好看的字体:Operator Mono
- Python网页编程(CGI)
- sprd 11 播放视频时开启录屏,视频闪烁或提示正在加载问题
- systemd 简介
- js判断字符串字符数(汉字算两个)
- 神经网络预测鸢尾花的种类
- Mac OS之Latex(MacTeX)初体验
- GeoServer结合FWTools切片工具发布影像金字塔切片
- ActiveReportsJS3.0 详解 ActiveReportsJS3.X
- echarts 实现横坐标只显示第一个和最后一个自定义的内容
- 16个时髦的扁平化设计的 HTML5 CSS3 网站模板
热门文章
- MySQL使用group by分组查询每组最新的一笔数据
- uploader什么意思_webuploader
- Prompt learning系列之入门篇
- 计算机地图制图的优势,计算机地图制图
- 计算机科学与技术反思录
- 软件工程网络15个人作业3——案例分析(201521123107)
- 利用CSS让dl dt dd呈现多行多列效果
- 给定C语言数据结构,给定C语言的数据结构struct T { int w; union T { char c;int i;double d;)U; };...
- SATA、AHCI、ATA等相关知识概述
- greenplum 历史拉链表