「java身份算法」身份证算法规则

博主:adminadmin 2022-12-19 20:36:07 71

今天给各位分享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身份算法的信息别忘了在本站进行查找喔。

The End

发布于:2022-12-19,除非注明,否则均为首码项目网原创文章,转载请注明出处。