`
antjava
  • 浏览: 8871 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

JAVA身份证号码校验

    博客分类:
  • JAVA
阅读更多

因项目需要,写了这么一个类,最近事情比较多,在完善吧,现在只要得到生日和性别就ok了。

/**
 * @author: 8.water@163.com
 * @createtime: 2010-11-1 上午10:27:30
 * @Description: shida
 */
public class Utils {
	/**
	 * 根据身份证号码得到生日,并返回性别
	 * @param num
	 * @return String[] string[0]生日,string[1]性别
	 * 如果证件类型非法,则返回null
	 */
	public static String[] getDataByNo(String num) {
		// 判断是否为空
		if (num == null || num.trim().equals("")) {
			return null;
		}
		//得到证件号码长度
		int length = num.length();
		// 判断是否为15或18位
		if (length != 15 && length != 18) {
			return null;
		}
		//如果证件号码为15位,转换为18位
		if(length == 15){
			num=uptoeighteen(num);
		}
		//求和
		int count = 0;
		// 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 
		char[] numChar = num.substring(0, 17).toCharArray();
		int[] xishu = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
		int[] vi = { 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 };

		for (int i = 0; i < numChar.length; i++) {
			count += (numChar[i] - '0') * xishu[i];
		}
		// 余数
		int temp = count % 11;
		// 判断校验码位是否正确
		String yx = (temp == 2 ? "X" : String.valueOf(vi[temp])).toString();

		String[] data = new String[2];

		if (!yx.equalsIgnoreCase(num.substring(17, 18))) {
			return null;
		} else {
				// 得到生日
				data[0] = num.substring(6, 14);
				// 校验性别
				data[1] = num.substring(14, 17);
			// 性别代码为偶数是女性奇数为男性
			if (Integer.parseInt(data[1]) % 2 == 0) {
				data[1] = "女";
			} else {
				data[1] = "男";
			}
		}
		return data;
	}

	public static void main(String[] args) {
		//以下证件号码均从网络上寻找,如有雷同,请告知
		String[] tests = new String[] { "362522740927501",
				"110227198001050556", "210124198508162281",
				"21031119851130004X", "34052419800101001X" };
		for (int i = 0; i < tests.length; i++) {
			String[] data = getDataByNo(tests[i]);
			if (data == null) {
				System.out.println("身份证号码错误");
			} else {
				for (int j = 0; j < data.length; j++) {
					System.out.println(data[j]);
				}
			}
			System.out.println("=================");
		}
	}

	// 15位身份证号码提升为18位
	public static String uptoeighteen(String fifteencardid) {
		String eightcardid = fifteencardid.substring(0, 6);
		eightcardid = eightcardid + "19";
		eightcardid = eightcardid + fifteencardid.substring(6, 15);
		eightcardid = eightcardid + getVerify(eightcardid);
		return eightcardid;
	}

	// 得到第18位的校验码
	public static String getVerify(String eightcardid) {
		int remaining = 0;
		int[] wi = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 };
		int[] vi = { 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 };
		int[] ai = new int[18];
		String returnStr = null;
		try {
			if (eightcardid.length() == 18) {
				eightcardid = eightcardid.substring(0, 17);
			}
			if (eightcardid.length() == 17) {
				int sum = 0;
				String k = null;
				for (int i = 0; i < 17; i++) {
					k = eightcardid.substring(i, i + 1);
					ai[i] = Integer.parseInt(k);
					k = null;
				}
				for (int i = 0; i < 17; i++) {
					sum = sum + wi[i] * ai[i];
				}
				remaining = sum % 11;
			}
			returnStr = remaining == 2 ? "X" : String.valueOf(vi[remaining]);
		} catch (Exception ex) {
			return null;
		} finally {
			wi = null;
			vi = null;
			ai = null;
		}
		return returnStr;
	}
}
 

 

分享到:
评论

相关推荐

    JAVA身份证号码校验类

    针对身份证号码的校验,以及能自动将身份证从15位升级为18位

    Java居民身份证号校验规则

    Java居民身份证号校验规则!Java居民身份证号校验规则!Java居民身份证号校验规则!Java居民身份证号校验规则!Java居民身份证号校验规则!

    JAVA验证身份证号码校验码是否正确.zip

    在Java编程中,验证身份证号码的校验码是否正确是一项常见的任务,特别是在处理个人信息时,如用户注册、信息录入等场景。本教程将深入探讨如何使用Java实现这一功能。 首先,我们需要了解身份证号码的基本结构。...

    Java身份证号码合法性校验算法,正则表达式。

    最完善的身份证号码合法性校验Java算法,适合Android平台,可以直接拿来在项目中使用,正则表达式。

    Java校验身份证号码工具类 ---运行几年了,很靠谱。包含15位身份证校验

    Java校验身份证号码工具类 ---运行几年了,很靠谱。包含15位身份证校验Java校验身份证号码工具类 ---运行几年了,很靠谱。包含15位身份证校验

    java身份证号验证源代码

    在Java编程中,身份证号码验证是一项常见的需求,用于确保输入的身份信息准确无误。身份证号码是由18位数字组成的,包含个人的出生日期、性别、地区等信息,并且具有特定的校验规则。本篇文章将深入讲解如何使用Java...

    java写的身份证号码校验类

    ### Java实现的身份证号码校验类详解 #### 一、引言 身份证号码是中国公民的唯一标识符,具有很高的安全性和唯一性。在中国大陆地区,身份证号码由18位数字组成,其中最后一位用于校验整个身份证号码的有效性。...

    使用Java正则表达式实现一个简单的身份证号码验证

    ### 使用Java正则表达式实现一个简单的身份证号码验证 #### 一、背景介绍 身份证号码是中国公民的身份标识,由15位或18位数字组成(早期为15位,后改为18位)。其中,第18位是校验码,可能是数字0~9或者大写字母X。...

    身份证号验证Java实现

    将身份证号码前面的17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。 将这17位数字和系数相乘的结果相加。 用加出来和除以11,取余数。 余数...

    正则表达式校验身份证号码

    alert('18位身份证校验码不正确, 应该为' + valnum); return false; } ``` #### 总结 通过以上介绍,我们可以看到使用正则表达式进行身份证号码的简单校验是一种快速有效的方法,而复杂的校验则能够进一步确保...

    一个 java 校验身份证号码的,很强的

    标题中的“一个 Java 校验身份证号码的,很强的”指的是使用 Java 语言编写的身份验证工具,用于检查中国大陆居民的身份证号码(身份证18位)的合法性。在 Java 开发中,这样的工具可以帮助程序员快速验证输入数据的...

    java实现的18位身份证格式验证算法

    在Java中实现18位身份证格式验证涉及到多个步骤,主要包括:校验位计算、出生日期转换以及地区编码验证。下面将详细介绍这些知识点。 1. **身份证号码结构** - 中国18位身份证号码由17位数字和最后一位校验码组成...

    JAVA 18位身份证号码校验码的算法

    在Java编程语言中,身份证号码的校验码计算是一个常见的需求,主要用于确保输入的18位身份证号码的有效性。这个算法主要应用于中国的居民身份证,它包含个人出生日期、性别、地区编码等信息,并通过特定的校验算法来...

    java ip,身份证等接口查询所在地

    此外,如果需要验证身份证号码的合法性,可以使用Java编写算法检查其校验码是否正确,这涉及到对身份证号码的数学计算和模运算。 总结来说,Java可以通过第三方库实现IP地址的地理位置查询,同时可以通过身份证号码...

    身份证校验码方法-Java

    根据提供的信息,我们可以总结出以下关于“身份证校验码方法-Java”的知识点: ### 一、身份证号码结构 中国的第二代居民身份证号码由18位组成,包括了以下几个部分: - **前6位**:行政区划代码。 - **第7至14位*...

    一个身份证码校验的demo

    在这个“身份证码校验的demo”中,我们将探讨身份证号码的结构以及如何进行有效的校验。 身份证号码的结构分为以下几个部分: 1. 地址码(前6位):代表持证人常住户口所在县(市、区)的行政区划代码。 2. 出生...

    Java 身份证号查询

    这个"Java身份证号查询"项目提供了一个解决方案,允许我们通过身份证号码获取个人的出生地、年龄等关键信息。下面将详细阐述实现这一功能所涉及的Java知识点。 首先,中国的身份证号码是由18位数字组成的,前6位...

    JAVA身份证合法性校验

    JAVA身份证合法性校验,JAVA验证所有的身份证的合法性,

    根据身份证号码获取性别、出生日期、籍贯省市

    如果身份证号码的前17位数字正确,那么第18位应该能通过校验,反之则可能存在问题。 在实际应用中,开发者可以编写程序来自动解析身份证号码。通常,会使用正则表达式来验证身份证号码的格式,然后通过上述规则提取...

Global site tag (gtag.js) - Google Analytics