「java身份算法」身份证算法规则
今天给各位分享java身份算法的知识,其中也会对身份证算法规则进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、求解用java语言 编写一个身份证的类,可以用来验证身份证的长度,并可以显示地址码,生日,性别。
- 2、用JAVA实现--15位身份证扩展为18位身份证
- 3、java最常用的几种加密算法
- 4、用Java从任意给定的身份证号码中提取此人的出生日期
- 5、利用Java求出有一串身份证的数字,用分号隔开,提取每个身份证号,统计男性和女?
- 6、使用java判断输入身份证号位数是否正确,判断输入是否有效
求解用java语言 编写一个身份证的类,可以用来验证身份证的长度,并可以显示地址码,生日,性别。
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("请输入十八位身份证号码!");
String id=input.next();
if(id.length()!=18){
System.out.println("身份证号码长度不对!");
}
String top=id.substring(0, 17);
String sishu="7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2";
String[] xishu=sishu.split(",");
int sum=0;
for (int i = 0; i top.length(); i++) {
int a=Integer.parseInt(top.charAt(i)+"");
int b=Integer.parseInt(xishu[i]);
sum+=a*b;
}
int xiaoyanjisuan=sum%11;
int xiaoyan=Integer.parseInt(id.substring(17, 18));
if(xiaoyanjisuan==xiaoyan){
System.out.println("身份证号码检测正确!");
}else{
System.out.println("身份证号码检测错误!");
return;
}
String dizhi=id.substring(0,6);
String nian=id.substring(6,10);
String yue=id.substring(10, 12);
String ri=id.substring(12,14);
int sex=Integer.parseInt(id.substring(16,17));
System.out.println("地址码为:"+dizhi);
System.out.println("生日为:"+nian+"年"+yue+"月"+ri+"日");
if(sex%2==0){
System.out.println("性别为:女");
}else{
System.out.println("性别为:男");
}
}
用JAVA实现--15位身份证扩展为18位身份证
有主函数,楼主可以完全复制下来运行后,就行了,15位转成了18位
public class VerifyIDCardNumber {
StringBuilder sb;
public static void main(String[] args) {
VerifyIDCardNumber vv=new VerifyIDCardNumber();
}
public VerifyIDCardNumber(){
try {
getEighteenIDCard("123456789123456");
System.out.println(sb.toString());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String getEighteenIDCard(String fifteenIDCard) throws Exception{
if(fifteenIDCard != null fifteenIDCard.length() == 15){
sb = new StringBuilder();
sb.append(fifteenIDCard.substring(0, 6))
.append("19")
.append(fifteenIDCard.substring(6));
sb.append(getVerifyCode(sb.toString()));
return sb.toString();
} else {
throw new Exception("不是15位的身份证"); } }
public char getVerifyCode(String idCardNumber) throws Exception{
if(idCardNumber == null || idCardNumber.length() 17) {
throw new Exception("不合法的身份证号码");
}
char[] Ai = idCardNumber.toCharArray();
int[] Wi = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
char[] verifyCode = {'1','0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
int S = 0;
int Y;
for(int i = 0; i Wi.length; i++){
S += (Ai[i] - '0') * Wi[i];
}
Y = S % 11;
return verifyCode[Y];
}
public boolean verify(String idCardNumber) throws Exception{
if(idCardNumber == null || idCardNumber.length() != 18) {
throw new Exception("不是18位的身份证号码");
}
return getVerifyCode(idCardNumber) == idCardNumber.charAt(idCardNumber.length() - 1);
}
}
输出结果为:12345619789123456X
java最常用的几种加密算法
简单的Java加密算法有:
第一种. BASE
Base是网络上最常见的用于传输Bit字节代码的编码方式之一,大家可以查看RFC~RFC,上面有MIME的详细规范。Base编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base来将一个较长的唯一标识符(一般为-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到。
第二种. MD
MD即Message-Digest Algorithm (信息-摘要算法),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD的前身有MD、MD和MD。
MD算法具有以下特点:
压缩性:任意长度的数据,算出的MD值长度都是固定的。
容易计算:从原数据计算出MD值很容易。
抗修改性:对原数据进行任何改动,哪怕只修改个字节,所得到的MD值都有很大区别。
弱抗碰撞:已知原数据和其MD值,想找到一个具有相同MD值的数据(即伪造数据)是非常困难的。
强抗碰撞:想找到两个不同的数据,使它们具有相同的MD值,是非常困难的。
MD的作用是让大容量信息在用数字签名软件签署私人密钥前被”压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。除了MD以外,其中比较有名的还有sha-、RIPEMD以及Haval等。
第三种.SHA
安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于^位的消息,SHA会产生一个位的消息摘要。该算法经过加密专家多年来的发展和改进已日益完善,并被广泛使用。该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。散列函数值可以说是对明文的一种“指纹”或是“摘要”所以对散列值的数字签名就可以视为对此明文的数字签名。
SHA-与MD的比较
因为二者均由MD导出,SHA-和MD彼此很相似。相应的,他们的强度和其他特性也是相似,但还有以下几点不同:
对强行攻击的安全性:最显著和最重要的区别是SHA-摘要比MD摘要长 位。使用强行技术,产生任何一个报文使其摘要等于给定报摘要的难度对MD是^数量级的操作,而对SHA-则是^数量级的操作。这样,SHA-对强行攻击有更大的强度。
对密码分析的安全性:由于MD的设计,易受密码分析的攻击,SHA-显得不易受这样的攻击。
速度:在相同的硬件上,SHA-的运行速度比MD慢。
第四种.HMAC
HMAC(Hash Message Authentication Code,散列消息鉴别码,基于密钥的Hash算法的认证协议。消息鉴别码实现鉴别的原理是,用公开函数和密钥产生一个固定长度的值作为认证标识,用这个标识鉴别消息的完整性。使用一个密钥生成一个固定大小的小数据块,即MAC,并将其加入到消息中,然后传输。接收方利用与发送方共享的密钥进行鉴别认证等。
用Java从任意给定的身份证号码中提取此人的出生日期
用Java从任意给定的身份证号码中提取此人的出生日期,例子如下:
public class TestC {
public static void main(String[] args){
//18位的第二代身份证,出生日期是从7位到14位是出生日期
String str="450919199903050123";
//字符串截取下标从0开始的
String birthday=str.substring(6, 14);
System.out.println(birthday);
}
}
结果:
19990305
利用Java求出有一串身份证的数字,用分号隔开,提取每个身份证号,统计男性和女?
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
class Dome{
public static void main(String[] args) throws IOException {
int quantity[]=new int[2];//1表示男人的个数,0表示女生个数
String card[]=new String[0];//记录身份证号码
String filePath = "D:/aa.txt";//假设你D盘下有一个aa.txt文件中存放着身份证号码
FileInputStream fin;
try {
fin = new FileInputStream(filePath);//从filePath中获得输入字节
BufferedReader buffReader = new BufferedReader(new InputStreamReader(fin));
String str = "";//用于暂存读取的内容
str = buffReader.readLine();//按行读取内容给str,只读取一行
card=new String[str.length()/17];//因为不知道身份证号码的数量,所以创建可能有的数量
int p=0;//记录card的数量
for(int i=0;istr.length();i++){
if(str.indexOf(",",i)!=-1){//判断是否是最后一个逗号
card[p]=str.substring(i,str.indexOf(",",i));//截取对应的身份证号码,这里用的是英文逗号
System.out.println(card[p]);
i=str.indexOf(",", i);//跳到以及处理过的结果末尾
}else{
card[p]=str.substring(i,str.length());
System.out.println(card[p]);
break;//结尾结束循环
}
p++;
}
buffReader.close();//关闭文件流
for(int i=0;icard.length;i++){
if(card[i].length()==18){//判断是否出错
quantity[((int)card[i].charAt(16)-48)%2]++;//计算第17位是奇数或偶数并对应相加
}
}
System.out.println("男生数量:"+quantity[0]);//输出男生结果
System.out.println("女生数量:"+quantity[1]);//输出女生结果
} catch (FileNotFoundException e) {
System.out.println(e);//输出错误原因
}
}
}
不知道符不符合你的要求
使用java判断输入身份证号位数是否正确,判断输入是否有效
使用java语言实现一个身份证号码转换的程序:把15位号码转换为18位的号码功能要求: 1.判断输入身份证号位数是否正确,判断输入是否有效(如输入非数字字符),否则提示用户重新输入。 2.计算身份证号码。 3.根据身份证号的第7-14位(YYYYMMDD)显示出生日期。 4.根据身份证号的第17位(奇数为男性,偶数为女性),显示性别。
java身份算法的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于身份证算法规则、java身份算法的信息别忘了在本站进行查找喔。
发布于:2022-12-19,除非注明,否则均为
原创文章,转载请注明出处。