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

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

阅读更多
    我们在制作在线注册时难免用到身份证号码这个属性,为了避免用户随意输入,我们还是要明白身份证编制规则,可以一定程度阻止非法信息,本文是以教学和网络应用为目的的说明。
    首先说说我国居民身份号码证号码(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  
用正则表达式不挺好吗?

相关推荐

    身份证验证HTML源码

    3.身份证验证根据用户提供的身份证信判断出省市,然后在判断....做到只能输入 正确的省份证信息才可以.... 判断身份证的方法比使用正则表达式更加准确详细请看 js中的 checkidcard.js 判断省份证的 js function ...

    C#实现身份证号码验证的方法

    随着现在互联网的发展,越来越多的注册用户的地方都用到了身份证,那么对于输入的身份证如何验证呢?看下面的代码,其实很简单。 主要注意的是,目前的身份证分为16和18位,然后分别验证校验位,省份,生日即可。 ...

    struts2+ajax 无刷新验证身份证号是否已注册,身份证号是否正确

    运行中的代码包括STRUTS.XML,ACTION,页面调用代码进行了注释,,,在用户输入完成身份证号自动验证是否正确以及是否存在,并动态显示"正在验证身份证号",对身份证号输入错误的进行提前提醒,减少...

    如何用javascript正则表达式验证身份证号码是否合法

    在用户注册页面有些需求要求的比较严格,需要对身份证验证是否合法,通过此功能严格此系统软件,从而过滤到很多水客。此篇文章主要是讲解如何用javascript正则表达式验证身份证号码是否合法,需要的朋友可以参考下

    身份证密码强度专业验证

    可以用在.asp .php .jsp的用户...3.身份证验证根据用户提供的身份证信判断出省市,然后在判断....做到只能输入 正确的省份证信息才可以.... 判断身份证的方法比使用正则表达式更加准确详细请看 js中的 checkidcard.js

    25175student.web.rar_手机号码验证_手机验证码_身份证 web

    所有报名内容都要经过验证,互联网上细节做的到位的25175报名类软件 通过注册的帐号:密码:验证码:进行登陆学生 后台路径Admin/Login.aspx 管理员admin 密码aaa 密码是加MD5加密,分页技术,用户群删

    JavaScript正则表达式验证身份证号码是否合法(两种方法)

    在用户注册页面有些需求要求的比较严格,需要对身份证js验证是否合法,通过此功能严格此系统软件,从而过滤到很多水客。下面就此实现方法给大家讲解下。  很多时候我们都是通过一组正则表达式来判断用户输入的...

    史上最强大的ASP+ajax注册即时提示程序

    经常有网友找我要注册即时提示系统,为了更好的让朋友们明白,今天特别整理了一份ASP+ajax的注册...4、注册时验证用户输入的验证码和系统产生的验证码是否一致。 5、对输入中文验证 6、QQ号码验证 7、身份证号码验证

    正则表达式截取身份证号码加密的方法

    下面一段简单的代码给大家介绍正则表达式...一些要求用户信息比较严格的地方比如用户注册、登录的时候都需要验证用户的身份证是否合法,而通过这些验证能大大的过滤掉很多水客,给你的系统带来非常精准的用户信息。  

    Validate用户注册表单验证插件.zip

    Validate用户注册表单验证插件是一款基于jQuery实现的通用表单验证插件,有DEMO...可以进行账号、密码、电话、手机、IP、URL、电子邮箱、中文姓名、身份证号码、数字验证码、自定义验证规则-数字等用户注册信息的验证。

    jQuery完整注册表单提交验证

    jQuery表单提交验证verify一套完整的用户注册前端校验,包含用户名,密码强度,显示隐藏密码,手机号输入控制手机验证码,真实姓名,身份证号等验证。

    正则表达式验证身份证号码和邮箱、判断checked选中状态

    项目中正好写到登录注册,在用blur事件验证用户输入内容的时候,出现了点bug,最后是在注册按钮onclick的事件里获取用户输入值来验证的。 判断checked选中状态: if(!$('#checkedAgree').prop("checked"){ console...

    jQuery多功能注册表单验证插件代码

    功能介绍:jQuery多功能注册表单验证插件代码,能够验证几乎所有字段,让你自定义错误提示的长度,提示内容,提示字体颜色,还能与php动态验证手机号或者用户名在数据库是否存在,还能验证身份证是否输入正确,还能配合短信...

    ASP—单元四 物业管理系统用户注册——验证控件.pdf

    在实际运用中,用户输入的数据不一定符合要求,所以需要程序员对这些注册的数据进行及时地...本单元将介绍住户管理模块中业主注册页面上的业主编号、姓名、身份证号码、联系人、入住日期、电子信箱等输入信息的验证。

    Jacascript+JQuery实现注册验证

    Javascript + 验证注册用户信息

    会员注册系统 注册页面动态验证

    功能简介: /Registration.asp 学生注册系统主文件 报名内容{用户名,密码,确认密码,EMail,QQ号码 ,真实姓名 ,性别,年龄,家庭住址,电话,手机,身份证号码,密码提示问题,安全...md5双重加密,防SQL注入,分页技术,用户群删,

    ASP.NET 窗体验证

    1. 设计并实现一个带验证控件的用户注册页面 要求如下: (1)页面浏览效果如图5-1和图5-2所示。 (2)"用户名""密码""确认密码""生日""电话号码""身份证号"等信息必须输入。 (3)"密码"和"确认密码"的输入值必须一致。 ...

    资源库管理系统用户手册

    进入系统登录页面,点击新用户注册,进入填写用户基本信息页面,在这里填写用户的基本信息,点击确定(注:此时可以对用户的基本输入信息进行验证,如用户名是否重复,身份证是否合法等,在验证身份证时,15位身份证...

    python项目基于深度学习的身份证识别考勤系统(django).zip

    3. **用户管理**:提供用户注册、登录功能,以及管理人员对员工信息的维护界面。 4. **数据分析与报告**:生成考勤数据统计报告,帮助管理层分析员工出勤情况。 5. **异常处理**:对无法识别的身份证图像进行标记,...

Global site tag (gtag.js) - Google Analytics