网上找了几个,写的都不太适合,有的写出来了,也没有给出参考的算法链接。这样就导致了如果产生错误我们无法排查(不懂原理怎么排查对吧)。
如果在使用过程中有疑虑,请参考:较验规则
包com.mengyunzhi.common.utils; 进口org.apache.commons.collections4.BidiMap; 进口org.apache.commons.collections4.bidimap.TreeBidiMap; 进口org.slf4j.Logger; 进口org.slf4j.LoggerFactory; 进口javax.validation.ValidationException; 进口java.util.Map; 进口java.util.Random;/* * *统一社会停用用代码 */公共接口UnifiedCreditCodeUtils { 日志记录器=LoggerFactory.getLogger (UnifiedCreditCodeUtils.class); 字符串baseCode=?123456789 abcdefghjklmnpqrtuwxy”; char [] baseCodeArray=baseCode.toCharArray (); int [] wi={1、3、9日27日,19日,26日,16日,17日,20日,29日,25日,13日,8日,24日,10日,30日,28日};/* * *生成供较验使用地图的代码 * * @return BidiMap */Integer>静态BidiMap<角色;generateCodes () { Integer> BidiMap<角色;代码=new TreeBidiMap<在(); for (int i=0;我& lt;baseCode.length ();我+ +){ 代码。put (baseCodeArray[我],我); } 返回码; }/* * *较验社会统一信用代码 * * @param unifiedCreditCode统一社会信息代码 * @return符合:没错 */静态布尔validateUnifiedCreditCode(字符串unifiedCreditCode) { 如果((unifiedCreditCode.equals (" ")) | | unifiedCreditCode.length () !=18) { 返回错误; } Integer> Map<角色;代码=generateCodes (); int parityBit; 尝试{ parityBit=getParityBit (unifiedCreditCode、编码); }捕捉(ValidationException异常e) { 返回错误; } 返回parityBit==codes.get (unifiedCreditCode.charAt (unifiedCreditCode.length () - 1)); }/* * *获取较验码 * * @param unifiedCreditCode统一社会信息代码 * @param码带有映射关系的国家代码 * @return获取较验位的值 */静态int getParityBit(字符串unifiedCreditCode Map<性格,Integer>编码){ char [] businessCodeArray=unifiedCreditCode.toCharArray (); int和=0; for (int i=0;我& lt;17;我+ +){ 字符键=businessCodeArray[我]; 如果(baseCode.indexOf(关键)==1){ 把新的ValidationException异常(“第”+字符串。返回对象的值(i + 1) +“位传入了非法的字符“+键); } 和+=(codes.get(关键)* wi[我]); } int结果=31 - % 31总和; 返回结果==31日& # 63;0:结果; }/* * *获取一个随机的统一社会信用代码 * * @return统一社会信用代码 */静态字符串generateOneUnifiedCreditCode () { 随机随机=new随机(); StringBuilder buf=new StringBuilder (); for (int i=0;我& lt;17;+ + i) { int num=random.nextInt (baseCode.length () - 1); buf.append (baseCode.charAt (num)); } 字符串代码=buf.toString (); 字符串upperCode=code.toUpperCase (); Integer> BidiMap<角色;代码=generateCodes (); int parityBit=getParityBit (upperCode、编码); 如果(codes.getKey (parityBit)==null) { logger.debug(“生成社会统一信用代码不符合规则”); upperCode=generateOneUnifiedCreditCode (); 其他}{ upperCode=upperCode + codes.getKey (parityBit); } 返回upperCode; } } >之前测试
包com.mengyunzhi.common.utils; 进口org.assertj.core.api.Assertions; 进口org.junit.Test; 进口静态org.junit.Assert。*; 公开课UnifiedCreditCodeUtilsTest { @Test 公共空间validateUnifiedCreditCode () { 字符串代码=?11310827965850580”; Assertions.assertThat (UnifiedCreditCodeUtils.validateUnifiedCreditCode(代码).isTrue (); } } >之前以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
JAVA实现社会统一信用代码校验的方法