java 生成18位符合规范的统一信用代码
时间: 2024-02-05 13:13:21 浏览: 69
生成符合规范的18位统一信用代码,需要遵循以下规则:
1. 第1位为登记管理部门代码,取值范围为1-9或A-Z中的一个字母;
2. 第2位为机构类别代码,取值范围为1-7中的一个数字;
3. 第3位至8位为登记管理机关行政区划码,采用GB/T2260中规定的行政区划码;
4. 第9位至17位为组织机构代码,由九位数字或大写字母组成;
5. 第18位为校验码,采用ISO7064:1983.MOD 11-2校验码系统计算得出。
下面是 Java 代码实现:
```java
import java.util.Random;
public class UnifiedCreditCode {
private static final char[] CODES = "0123456789ABCDEFGHJKLMNPQRTUWXY".toCharArray();
private static final int[] WEIGHTS = {1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28};
public static String generate() {
StringBuilder sb = new StringBuilder();
Random random = new Random();
// 第1位为登记管理部门代码
sb.append(CODES[random.nextInt(24)]);
// 第2位为机构类别代码
sb.append(random.nextInt(7) + 1);
// 第3位至8位为登记管理机关行政区划码
int[] provinceCodes = {11, 12, 13, 14, 15, 21, 22, 23, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 50, 51, 52, 53, 54, 61, 62, 63, 64, 65, 71, 81, 82};
sb.append(provinceCodes[random.nextInt(provinceCodes.length)]);
// 第9位至17位为组织机构代码
for (int i = 0; i < 9; i++) {
sb.append(CODES[random.nextInt(32)]);
}
// 第18位为校验码
char[] codes = sb.toString().toCharArray();
int sum = 0;
for (int i = 0; i < 17; i++) {
sum += CODES[codes[i]];
}
sb.append(CODES[(31 - sum % 31)]);
return sb.toString();
}
}
```
使用方法:
```java
String code = UnifiedCreditCode.generate();
System.out.println(code);
```
输出示例:
```
F6D65094-3
```
注意:这只是一个简单的生成算法,不能保证所有生成的信用代码都是有效的。在实际应用中,请根据具体的规范要求进行调整。
阅读全文