身份证号码校验器 MOD11-2
我制作了一个身份证号码校验器,灵感的来源是看了B站回形针之前的视频
【回形针PaperClip】如何成为一个有身份的人?
身份证校验码规则在视频的“00:55”的时间开始
之前自学c++的时候想做但是难产了,现在用java写出来了。
到那时好像这个的复杂程度O(n)
并且做了注释,这下可读性应该高一些了。
import java.util.Scanner;
public class nameid{
public static void main(String[] arge){
Scanner sc=new Scanner(System.in);
System.out.println("请输入你的身份证号码");
long b=sc.nextLong(); //取得身份证号码
long e=1; //自动取出某一位计数器
int g=0; //做运算后的合数
for(int d=1;d<=17;d++){
e*=10; //先乘10,这样直接跳过第18位取出十位
long f=(b/e)%10; //取出这一位上的数字
long c; //权重数字
c = (long)(Math.pow(2,d))%11; //取出权重数字
long l=f*c; //把每位的数字,和权重数字想相乘
g+=l; //把结果赋值给计数器
//System.out.println("加了1位");
}
int h=(12-(g%11))%11; //把相乘后相加的合数算出除以11的余数后,用12减这个余数,再除11取余
System.out.println("这个身份证号是"+(b%10==h)); //最后把这个值和第18位进行比较
}
}
谢谢大家了!