统一的社会信用代码验证是否真实 Java
背景介绍统一的社会信用代码是中华人民共和国国家市场监督管理局发布的唯一标志代码,用于识别法人身份,类似于其他国家的税号或企业注册号。由于社会信用代码的重要性,为了防止伪造和错误使用,我们需要检查输入的社会信用代码,以确保它是否真实有效。
本文将介绍如何使用 Java 编程语言验证统一社会信用代码的有效性。
统一社会信用代码结构按照具体规定,统一社会信用代码由18位数字或字母组成。其结构如下:
- 第一:注册管理部门代码(数字或字母)
- 第二位:机构类别代码(数字或字母)
- 第三至第八位:登记管理机关行政区划码(数字)
- 第九至第17位:主标识码(数字或字母)
- 第18位:校验码(数字或字母)
其中,校验码的计算公式如下:
- 将前17位数字和字母分别乘以相应的权重值,权重值从左到右依次为:1 3 9 27 19 26 16 17 20 29 25 13 8 24 10 30 28
- 将权重值与相应位数的数字和字母的乘积相加
- 将总和除以31,取余数
- 根据余数对应的规则表找到相应的验证码
下面是使用 Java 统一的社会信用代码是否是语言实现验证的真实示例代码:
public class UnifiedSocialCreditCodeValidator { private static final String CHECK_CODES = "0123456789"; public static boolean isValid(String code) { if (code == null || code.length() != 18) { return false; } int[] weights = {1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28}; int sum = 0; for (int i = 0; i < 17; i++) { char c = code.charAt(i); int value = getValue(c); sum += value * weights[i]; } int remainder = sum % 31; char checkCode = CHECK_CODES.charAt(remainder); return code.charAt(17) == checkCode; } private static int getValue(char c) { if (Character.isDigit(c)) { return c - '0'; } else if (Character.isUpperCase(c)) { return c - 'A' + 10; } else { return -1; } }}
上面定义了一个代码 UnifiedSocialCreditCodeValidator
类,其中 isValid
该方法用于验证统一的社会信用代码。权重数组用于代码中 weights
与校验码字符集合 CHECK_CODES
。
在 isValid
在方法中,首先判断输入的代码长度是否为18位,如果没有,则返回 false
。接下来,根据统一社会信用代码的验证规则,计算前17名的加权总和,并根据计算结果取余数。最后,根据余数找到相应的验证码,并与输入代码的最后一个进行比较。如果相等,则表示验证已通过。
以下是统一社会信用代码验证状态图:
stateDiagram [*] --> 校验 校验 --> 有效: 校验通过 校验 --> 无效: 校验不通过 有效 --> [*] 无效 --> [*]
使用示例以下是使用示例代码来验证统一的社会信用代码是否真实:
public class Main { public static void main(String[] args) { String code = "91350100M000100Y43"; boolean isValid = UnifiedSocialCreditCodeValidator.isValid(code); if (isValid) {
