吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 10938|回复: 38
收起左侧

[Java 原创] 【Java】编写身份证号码校验工具

[复制链接]
尘缘丶 发表于 2017-11-15 00:18
本帖最后由 wushaominkk 于 2018-4-27 17:47 编辑

很久之前楼主闲的无聊做Java校验身份证,其实算法我也找了,最开始根本不理解,后来慢慢接受的,所以当时刚理解就开始做
算法层次还是停留在加减法,希望大家不要介意,下面给大家介绍一下写的这些东西
CM-1.rar (59.69 KB, 下载次数: 175)

[Java] 纯文本查看 复制代码
private String num = null;//声明的身份证号码
     
    public Jiao() {//无参构造方法
        super();
    }
 
    public Jiao(String num) {//有参构造方法
        super();
        this.num = num;
        JiaoYan(num);
    }
 
    public void JiaoYan(String fhz){//校验方法
        if(num.length()==18){
            int qq = 0;//截取字符的起点
            String year = num.substring(qq+6, qq+10);//截取年
            String yue = num.substring(qq+10, qq+12);//截取月
            int y=Integer.parseInt(yue);
            String ri = num.substring(qq+12, qq+14);//截取日
            int r=Integer.parseInt(ri);
            int nyr=Integer.parseInt(year+yue+ri);
            SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");//设置日期格式
            int rq=Integer.parseInt(df.format(new Date()));
            System.out.println(rq);// new Date()为获取当前系统时间
            int iW[]={7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
            int sum=0;
            int sum1=0;
            int pd;
            if(nyr<rq&&nyr>19000000){
                if((y>00&&y<=12)&&(r>00&&r<=31)){
                    System.out.println(year+"年"+yue+"月"+ri+"日");
                    String sz [] = new String [17];
                    int zx[]=new int [17];
                    for(int i=0;i<sz.length;i++){
                        String sr =num.substring(i, i+1);
                        sz[i]=sr;
                        zx[i]=Integer.parseInt(sz[i]);
                        sum=iW[i]*zx[i];
                        sum1=sum+sum1;
                         
                    }
                    pd=sum1%11;
                    String zh=num.substring(17);
                    switch(pd){
                    case 0:
                        if(zh.equals("1")){
                            System.out.println("验证成功");
                            fhz=num;
                        }else{
                            System.out.println("验证失败");
                        }
                        break;
                    case 1:
                        if(zh.equals("0")){
                            System.out.println("验证成功");
                            fhz=num;
                        }else{
                            System.out.println("验证失败");
                        }
                        break;
                    case 2:
                        if(zh.equals("X")){
                            System.out.println("验证成功");
                            fhz=num;
                        }else{
                            System.out.println("验证失败");
                        }
                        break;
                    case 3:
                        if(zh.equals("9")){
                            System.out.println("验证成功");
                            fhz=num;
                        }else{
                            System.out.println("验证失败");
                        }
                        break;
                    case 4:
                        if(zh.equals("8")){
                            System.out.println("验证成功");
                            fhz=num;
                        }else{
                            System.out.println("验证失败");
                        }
                        break;
                    case 5:
                        if(zh.equals("7")){
                            System.out.println("验证成功");
                            fhz=num;
                        }else{
                            System.out.println("验证失败");
                        }
                        break;
                    case 6:
                        if(zh.equals("6")){
                            System.out.println("验证成功");
                            fhz=num;
                        }else{
                            System.out.println("验证失败");
                        }
                        break;
                    case 7:
                        if(zh.equals("5")){
                            System.out.println("验证成功");
                            fhz=num;
                        }else{
                            System.out.println("验证失败");
                        }
                        break;
                    case 8:
                        if(zh.equals("4")){
                            System.out.println("验证成功");
                            fhz=num;
                        }else{
                            System.out.println("验证失败");
                        }
                        break;
                    case 9:
                        if(zh.equals("3")){
                            System.out.println("验证成功");
                            fhz=num;
                        }else{
                            System.out.println("验证失败");
                        }
                        break;
                    case 10:
                        if(zh.equals("2")){
                            System.out.println("验证成功");
                            fhz=num;
                        }else{
                            System.out.println("验证失败");
                        }
                        break;
                    }
                }else{
                    System.out.println("出生日期错误");
                    fhz="出生日期错误";
                }
            }else{
                System.out.println("出生年月日错误");//年月日错误,结束
                fhz="出生年月日错误";
            }
        }else{
            System.out.println("输入错误,长度不对");
            fhz="输入错误,长度不对";
        }
    }



下面就是测试类,创建对象的时候调用的无参构造器,记得导包哦
[Java] 纯文本查看 复制代码
System.out.println("请输入自己的身份证号码");
        Scanner in=new Scanner(System.in);
        Jiao j=new Jiao(in.next());



测试图在下方,身份证号码网上随便搜的一个,有一些大家用不到,但是为了证明一下,所以打印出来了


图片.png



免费评分

参与人数 7吾爱币 +7 热心值 +6 收起 理由
又红又专 + 1 + 1 相当不错
zhzhip + 1 + 1 拿走了 谢谢分享
逗逗云 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Spheal + 1 + 1 已答复!
小范 + 2 我很赞同!
War-Horse + 1 + 1 用心讨论,共获提升!
庄胜文 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

公子语凉 发表于 2018-4-27 22:46
[Java] 纯文本查看 复制代码
package 身份证验证小程序;

import java.util.Scanner;

public class Test 
{
	public static void main(String[] args) 
	{
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入18位身份证:");
		while(true)
		{
			String str = sc.nextLine();
			char[] arr =str.toCharArray();
			if(panduan(arr))
			{
				System.out.println("输入正确!");
				break ;
			}
			System.out.println("输入错误,请重新输入:");
		}
	}
	public static boolean panduan(char[] arr)
	{
		int weight[] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
		char map[] = {'1','0','X','9','8','7','6','5','4','3','2'};
		int sum = 0 ;
		for(int i = 0 ; i < 17 ; i++)
		{
			sum += (arr[i]-'0') * weight[i]; 
		}
		int i = sum%11 ;
		char c = arr[arr.length-1];
		if(map[i] == c)
		{
			return true ;
		}
		return false ;
	}
}

	















 楼主| 尘缘丶 发表于 2017-11-23 00:39
anttu 发表于 2017-11-22 20:07
身份证号校验无法用正则,六位数字地址码+八位数字出生日期码+三位数字顺序码+一位数字校验码,正则做不到

身份证号规则,前六位(省市县各2位),中间八位出生年月日(8位),后边两位是登记户籍时派出所的编号(当地的编号,可能是乡镇级),倒数第二位性别(男单。女双),最后一位校验码(通过这个公式算出来的校验码)。。。
但,计算做出来了,这个身份证号码是否存在那就不得而知了,所以只能用作校验身份证号码,不能判断实名制真实性
萋小磊 发表于 2017-11-15 00:50
FZJ94 发表于 2017-11-15 01:05 来自手机
谢谢分享 那些零碎的回忆,渐渐失去了方向。
sayysl 发表于 2017-11-15 03:58
可以,老铁辛苦了。可以注册一些网站使用XX
wang65424773 发表于 2017-11-15 06:52 来自手机
挺好,谢谢分享
zlq6891 发表于 2017-11-15 08:01
学习一下,最近在学JAVA
xxp123 发表于 2017-11-15 08:05 来自手机
准备学这个的,等考研结束
vwisdom 发表于 2017-11-15 08:13
支持一下,我也是编程新手
Yan亮 发表于 2017-11-15 08:16
查询准确吗,
巨无霸 发表于 2017-11-15 08:28
这个很适合新手练习用,粗略的看了一眼,这个应该涉及到了字符串的分割、switch语句、if判断等等!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-3-28 18:05

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表