java 统一校验规则_JAVA实现社会统一信用代码校验的方法

JAVA实现社会统一信用代码校验的方法

发布于 2020-5-21|

复制链接

摘记: 网上找了几个,写的都不太适合,有的写出来了,也没有给出参考的算法链接。这样就导致了如果产生错误我们无法排查(不懂原理怎么排查对吧)。如果在使用过程中有疑虑,请参考: ..

网上找了几个,写的都不太适合,有的写出来了,也没有给出参考的算法链接。这样就导致了如果产生错误我们无法排查(不懂原理怎么排查对吧)。如果在使用过程中有疑虑,请参考:较验规则

```java

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 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 codes = generateCodes();

int parityBit = getParityBit(upperCode, codes);

if (codes.getKey(parityBit) == null) {

logger.debug("生成社会统一信用代码不符合规则");

upperCode = generateOneUnifiedCreditCode();

} else {

upperCode = upperCode + codes.getKey(parityBit);

}

return upperCode;

}

}

```

测试

```java

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();

}

}

```


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部