我将为你详细讲解“JAVA 18位身份证号码校验码的算法”的完整攻略。
我将为你详细讲解“JAVA 18位身份证号码校验码的算法”的完整攻略。
什么是身份证号码校验码
身份证号码由17位数字和1位校验码组成(18位)。其中,前17位为身份证号码,最后一位为校验码。校验码一般都是用来检验身份证号码的正确性,通过校验码可以判断一个身份证号码是否是正确的身份证号码。
JAVA 18位身份证号码校验码算法
校验码的计算规则如下:
- 将前17位数字分别乘以对应的系数,系数如下:
[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]。 - 将每个乘积相加。
- 将和除以11,取余数。余数对应的数字如下:
[1,0,X,9,8,7,6,5,4,3,2]。其中,X对应的是10。
通过以上算法,即可得到最后一位校验码。
下面是JAVA代码示例:
public class IdCardUtils {
private static final int[] FACTORS = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
private static final int[] CHECK_CODES = {1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2};
/**
* 计算18位身份证号码的校验码
* @param idCardNo 前17位身份证号码
* @return 校验码
*/
public static String getCheckCode(String idCardNo) {
int sum = 0;
for (int i = 0; i < idCardNo.length(); i++) {
char c = idCardNo.charAt(i);
int n = c - '0';
int factor = FACTORS[i];
sum += n * factor;
}
int idx = sum % 11;
return idx == 2 ? "X" : String.valueOf(CHECK_CODES[idx]);
}
}
示例说明
下面是两个示例说明:
示例一
假设身份证号码的前17位是110101197001016854,则校验码的计算过程如下:
1. 分别将前17位数字和对应的系数相乘,并将乘积相加。
1 * 7 + 1 * 9 + 0 * 10 + 1 * 5 + 0 * 8 + 1 * 4 + 1 * 2 + 9 * 1 + 7 * 6 + 0 * 3 + 0 * 7 + 1 * 9 + 6 * 10 + 8 * 5 + 5 * 8 + 4 * 4 + 2 * 2 = 238
2. 将和除以11,取余数。238 % 11 = 4。
3. 根据余数查找校验码对应的数字。校验码数组的下标从0开始,因此查找CHECK_CODES[4],得到3。
4. 所以,校验码为3。
5. 因此,身份证号码为1101011970010168543。
示例二
假设身份证号码的前17位是62072119880320726,则校验码的计算过程如下:
1. 分别将前17位数字和对应的系数相乘,并将乘积相加。
6 * 7 + 2 * 9 + 0 * 10 + 7 * 5 + 2 * 8 + 1 * 4 + 1 * 2 + 9 * 1 + 8 * 6 + 8 * 3 + 0 * 7 + 3 * 9 + 2 * 10 + 0 * 5 + 7 * 8 + 2 * 4 + 6 * 2 = 356
2. 将和除以11,取余数。356 % 11 = 8。
3. 根据余数查找校验码对应的数字。校验码数组的下标从0开始,因此查找CHECK_CODES[8],得到4。
4. 所以,校验码为4。
5. 因此,身份证号码为620721198803207264。
以上就是JAVA 18位身份证号码校验码算法的详细攻略。希望能对你有所帮助。
沃梦达教程
本文标题为:JAVA 18位身份证号码校验码的算法
基础教程推荐
猜你喜欢
- Java编写实现窗体程序显示日历 2023-01-02
- 是否适合从javabean类更新数据库? 2023-11-04
- 运用El表达式截取字符串/获取list的长度实例 2023-08-01
- Java中EnvironmentAware 接口的作用 2023-01-23
- Java+mysql实现学籍管理系统 2023-03-16
- JavaWeb 实现验证码功能(demo) 2024-04-14
- JSP 动态树的实现 2023-12-17
- 使用Java和WebSocket实现网页聊天室实例代码 2024-02-25
- 深入理解约瑟夫环的数学优化方法 2024-03-07
- springboot下使用shiro自定义filter的个人经验分享 2024-02-27
