`
sarin
  • 浏览: 1756136 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
E3b14d1f-4cc5-37dd-b820-b6af951740bc
Spring数据库访问系列...
浏览量:173587
C2083dc5-6474-39e2-993e-263652d27795
Android学习笔记
浏览量:368000
5f40a095-b33c-3e8e-8891-606fcf3b8d27
iBatis开发详解
浏览量:189176
B272a31d-e7bd-3eff-8cc4-c0624ee75fee
Objective-C学习...
浏览量:99765
社区版块
存档分类
最新评论

用户注册时身份证号码的验证

阅读更多
    我们在制作在线注册时难免用到身份证号码这个属性,为了避免用户随意输入,我们还是要明白身份证编制规则,可以一定程度阻止非法信息,本文是以教学和网络应用为目的的说明。
    首先说说我国居民身份号码证号码(18位)编制原则,首6位是出生地区编码,分别是省份编码2位+城市编码2位+区县编码2位。接下来的8位是生日编码采取4位年2位月和2位日。接下来的3位编码是随机编码,自然人出生后在公安机关注册时的随机编码。这17位编码是有意义编码,而最后一位是校验位,有11种,就是0~9和X。
    明白原理后就好办了,有意义数字是确定的,校验位肯定是算出来的。算法规则是加权平均求值,也就是前17位数字每位上有一个权值,用确定的17位数字每位和对应的权值相乘再求和得出加权数。加权数对11求模,得到的就是校验码。
    知道这些后就需要知道权值了,每位的权值如下规定:{ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5,8, 4, 2 },校验码排列规则是:{ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 }。
    有了这些,我们得到如下程序代码:
public class idcard {
	private static int[] weight = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5,
			8, 4, 2 };
	private static int[] check = { 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 };
	public static String checkCode(String idno17) {
		String checkCode = null;
		// 1.S=sum(ai*wi)
		int sum = 0;
		for (int i = 0; i < 17; i++) {
			sum += Integer.parseInt(idno17.substring(i, i + 1)) * weight[i];
		}
		// 2.y=mod(s,11)
		int mod = sum % 11;
		checkCode = mod == 2 ? "X" : String.valueOf(check[mod]);
		return checkCode;
	}
	public static void main(String[] args) {
		String idno = "";// 在这里添加身份证号的前17位
		String check = idcard.checkCode(idno);
		System.out.println(check);

	}
}

    地区编码可以在网上找到,这里就不列举出来了,如需使用,页面上可以利用Ajax技术进行实时校验反馈,希望对使用者有用。但不要用于其他不良行为。
21
0
分享到:
评论
8 楼 sarin 2010-11-26  
satikey 写道
这段代码我引用到我的项目中去了。希望不要介意。

您可以随意下载使用。
7 楼 satikey 2010-11-26  
这段代码我引用到我的项目中去了。希望不要介意。
6 楼 长安春雪 2010-02-24  
学习一下
5 楼 yhailj 2010-02-23  
正则没办法做到逻辑验证...

可以用脚本验证的, 为什么要到后台 ?

/**
 * 验证身份证号
 * 
 * @param cid 身份证号
 * @return 验证结果
 */
function cidInfo(cid) {
	if (cid == "") return "";
	var aCity = {
		11 : "北京", 12 : "天津", 13 : "河北", 14 : "山西", 15 : "内蒙古",
		21 : "辽宁", 22 : "吉林", 23 : "黑龙江 ", 31 : "上海", 32 : "江苏",
		33 : "浙江", 34 : "安徽", 35 : "福建", 36 : "江西", 37 : "山东",
		41 : "河南", 42 : "湖北 ", 43 : "湖南", 44 : "广东", 45 : "广西",
		46 : "海南", 50 : "重庆", 51 : "四川", 52 : "贵州", 53 : "云南",
		54 : "西藏 ", 61 : "陕西", 62 : "甘肃", 63 : "青海", 64 : "宁夏",
		65 : "***", 71 : "台湾", 81 : "香港", 82 : "澳门", 91 : "国外 "
	};
	var iSum = 0;
	var info = "";
	if (!/^\d{17}(\d|x)$/i.test(cid))
		return "格式错误";
	cid = cid.replace(/x$/i, "a");
	if (aCity[parseInt(cid.substr(0, 2))] == null)
		return "错误地区";
	sBirthday = cid.substr(6, 4) + "-" + Number(cid.substr(10, 2)) + "-"
			+ Number(cid.substr(12, 2));
	var d = new Date(sBirthday.replace(/-/g, "/"));
	var temp = d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate();
	if (sBirthday != temp)
		return "错误生日";
	for ( var i = 17; i >= 0; i--)
		iSum += (Math.pow(2, i) % 11) * parseInt(cid.charAt(17 - i), 11);
	if (iSum % 11 != 1)
		return "错误号码";
	return aCity[parseInt(cid.substr(0, 2))] + " . " + sBirthday + " . "
			+ (cid.substr(16, 1) % 2 ? "男" : "女");
}


前台验证并显示, 后台只校验真假

/**
 * 验证身份证
 * 
 * @author Yh
 */
public class IdCard {

	private static final int[] wi = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10,
			5, 8, 4, 2, 1 };

	private static final int[] vi = { 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 };

	private static int[] ai = new int[18];

	/**
	 * 验证身份证
	 * 
	 * @param 需要验证的身份证号码
	 * @return 通过则为 true
	 */
	public static boolean verify(String idcard) {
		if (idcard.length() == 15)
			idcard = uptoeighteen(idcard);
		if (idcard.length() != 18)
			return false;
		String verify = idcard.substring(17, 18);
		if (verify.equals(getVerify(idcard)))
			return true;
		return false;
	}

	private static String getVerify(String eightcardid) {
		int remaining = 0;
		if (eightcardid.length() == 18) {
			eightcardid = eightcardid.substring(0, 17);
		}
		if (eightcardid.length() == 17) {
			int sum = 0;
			for (int i = 0; i < 17; i++) {
				String k = eightcardid.substring(i, i + 1);
				ai[i] = Integer.parseInt(k);
			}
			for (int i = 0; i < 17; i++) {
				int w = wi[i];
				int a = ai[i];
				sum += w * a;
			}
			remaining = sum % 11;
		}
		return remaining == 2 ? "X" : String.valueOf(vi[remaining]);
	}

	private static String uptoeighteen(String fifteencardid) {
		String eightcardid = fifteencardid.substring(0, 6);
		eightcardid += "19" + fifteencardid.substring(6, 15);
		eightcardid += getVerify(eightcardid);
		return eightcardid;
	}

	public static void main(String[] args) {
		System.out.println(verify("11010519491231002X"));
	}
}

4 楼 sarin 2010-02-23  
lizhuang 写道
用正则挺好的,真实性需要公安的装备验证吧。

这只是在一定程度上的真实,要不输入18个1也没有意义
3 楼 lizhuang 2010-02-23  
用正则挺好的,真实性需要公安的装备验证吧。
2 楼 sarin 2010-02-20  
yuantong 写道
用正则表达式不挺好吗?

正则表达式好像不能对其真实性进行验证吧。
1 楼 yuantong 2010-02-20  
用正则表达式不挺好吗?

相关推荐

    身份证号码验证程序 javascript验证的html文件

    综上所述,这个身份证验证程序利用HTML和JavaScript技术实现了对用户输入的身份证号码的有效性检查,提供了良好的用户体验,并遵循了中国身份证号码的验证规则。对于前端开发人员来说,理解和掌握这些技术是至关重要...

    身份证号码验证示例源码.rar

    在这里,你可以找到处理身份证验证逻辑的代码,比如使用正则表达式检查身份证号码的格式,或者调用特定的服务或API来验证身份证号码的真实性。 `from.gif`可能是一个图形文件,可能是表单中的一个图标或者指示性的...

    验证身份证号码有效性的js

    在IT行业中,身份证号码验证是一项常见的需求,尤其是在用户注册、个人信息录入等场景。JavaScript(简称js)作为一种广泛使用的客户端脚本语言,非常适合用于此类实时验证。本文将深入探讨如何使用JavaScript来验证...

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

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

    PHP精确验证身份证号

    同时,为了保护用户隐私,验证身份证号码时不应直接显示完整的号码,而应进行脱敏处理,例如仅显示前6位和后4位。 总之,PHP验证身份证号码涉及字符串操作、正则表达式以及特定的数学算法。理解身份证号码的结构和...

    js身份证号验证

    在JavaScript中,身份证号验证是一个常见的需求,特别是在用户注册、个人信息填写等场景。这个`testCard`函数是用于验证输入的身份证号码是否有效的。函数接受一个参数`papersId`,即待验证的身份证号码字符串。 ...

    易语言身份证信息验证源码

    4. **逻辑判断**:验证身份证号码时需要检查地区码是否存在,出生日期是否合理,顺序码和校验码是否正确。这些都需要通过一系列的条件语句(如“如果...则”)来实现。 5. **错误处理**:在验证过程中,可能遇到...

    ASP.NET源码——身份证号码验证示例源码.zip

    通过分析和理解这个身份证验证示例源码,开发者可以学习到如何在 ASP.NET 中进行数据验证、用户输入处理以及错误处理等重要技能,这对于构建更安全、更可靠的Web应用至关重要。同时,这也可以作为一个基础,进一步...

    js验证身份证号码的有效方法

    身份证号码验证是前端开发中常见的功能之一,特别是在涉及用户注册、个人信息填写等场景时尤为重要。下面将详细介绍如何利用JavaScript来验证身份证号码的有效性。 #### 身份证号码规则简介 身份证号码一般有两种...

    用C++验证身份证

    ### C++程序验证身份证号码的有效性 #### 一、程序功能概述 本程序的主要功能是通过C++语言来实现对身份证号码的有效性验证。...这种类型的验证在实际应用中非常常见,例如在用户注册、身份认证等场景中。

    身份证验证器.zip

    在IT行业中,身份证验证是许多应用场景中的重要环节,如用户注册、实名认证等。本项目"身份证验证器.zip"是一个基于C#编程语言开发的身份信息验证工具,它旨在帮助开发者快速实现对中国大陆居民身份证号码的合法性和...

    js身份证号码获取性别、出生日期、籍贯省市.zip

    总之,通过JavaScript处理身份证号码,我们可以轻松获取个人的基本信息,这在许多Web应用中都有实际的应用场景,例如在线报名、用户注册等。正确理解和使用这个压缩包中的方法,能帮助开发者高效地实现相关功能。

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

    - 这种身份证验证算法常用于用户注册、个人信息录入等场景,以确保输入的身份信息准确无误,防止欺诈行为。 以上就是Java实现18位身份证格式验证算法的主要知识点,通过这些步骤,可以有效地检查输入的身份证号码...

    JAVA+jsp身份证验证的合法性

    在IT行业中,身份证验证是常见的身份验证手段,尤其是在开发涉及个人信息的系统时,如会员注册、实名认证等。在Java Web开发中,使用JSP(JavaServer Pages)结合Java后端逻辑,我们可以实现对身份证合法性的有效...

    JS 身份证验证程序

    身份证验证是确保用户输入的有效身份证号码的关键步骤,这对于很多需要用户身份验证的场景非常重要,如注册、实名认证等。在中国,身份证号码由18位数字组成,分为以下几个部分: 1. 地区码:前6位,表示持证人户籍...

    Go-IdValidator中国大陆用户身份证校验

    在实际应用中,`IdValidator`库可以广泛应用于用户注册、实名认证、支付验证等场景,确保用户输入的身份信息准确无误,从而提高系统的安全性和用户体验。 总结来说,`Go-IdValidator`是Go语言环境下用于验证中国...

    C#身份证验证.txtC#身份证验证.txtC#身份证验证.txt

    总之,身份证验证在许多应用中都是一个关键环节,尤其是在用户注册、身份认证或数据录入等场景下,确保身份证信息的准确性和合法性至关重要。通过理解身份证的结构和验证规则,可以有效地提高系统的安全性和用户体验...

    身份证号码对应地方区号表

    例如,在线注册、身份验证等场景中,系统可以通过读取用户的身份证号码来自动识别其所在地,从而提供更精准的服务或简化填写过程。 ### 结论 综上所述,通过分析身份证号码的结构及其组成部分,特别是前六位地区码...

    js身份证号的验证真伪和地区

    在IT领域,身份证号码验证是常见且重要的功能之一,尤其是在涉及用户身份认证、年龄验证、地域分析等场景中。从给定的文件标题、描述、标签以及部分内容来看,该文件提供了一个JavaScript脚本,用于验证中国居民...

Global site tag (gtag.js) - Google Analytics