湖北身份证号码格式

2022-08-13

第一篇:湖北身份证号码格式

身份证号码验证

package com.lishi.idcatch;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.GregorianCalendar;

import java.util.Hashtable;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

/*********************************** 身

****************************************/

/**份证验证开始

* 身份证号码验证

*

1、号码的结构

* 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,

* 八位数字出生日期码,三位数字顺序码和一位数字校验码。

*

2、地址码(前六位数)

* 表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。

*

3、出生日期码(第七位至十四位)

* 表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。

*

4、顺序码(第十五位至十七位)

* 表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,

* 顺序码的奇数分配给男性,偶数分配给女性。

*

5、校验码(第十八位数)

* (1)十七位数字本体码加权求和公式 S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和

* Ai:表示第i位置上的身份证号码数字值 Wi:表示第i位置上的加权因子 Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4

* 2 (2)计算模 Y = mod(S, 11) (3)通过模得到对应的校验码 Y: 0 1 2 3 4 5 6 7 8 9 10 校验码: 1 0

* X 9 8 7 6 5 4 3 2

* 2)现在校验最后一位 x必须是大写,其他没有区别!(X表示11)

*/

public class IdHolder {

/**

* 功能:身份证的有效验证

* @param IDStr 身份证号

* @return 有效:返回"" 无效:返回String信息* @throws ParseException*/public static String IDCardValidate(String IDStr) throws ParseException {String errorInfo = "";// 记录错误信息String[] ValCodeArr = { "1", "0", "X", "9", "8", "7", "6", "5", "4","3", "2" };String[] Wi = { "7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7","9", "10", "5", "8", "4", "2" };

为数字。";

String Ai = "";// ================ 号码的长度 15位或18位 ================if (IDStr.length() != 15 && IDStr.length() != 18) {errorInfo = "身份证号码长度应该为15位或18位。";return errorInfo;}// =======================(end)========================// ================ 数字 除最后以为都为数字 ================if (IDStr.length() == 18) {Ai = IDStr.substring(0, 17);} else if (IDStr.length() == 15) {Ai = IDStr.substring(0, 6) + "19" + IDStr.substring(6, 15);}if (isNumeric(Ai) == false) {errorInfo = "身份证15位号码都应为数字 ; 18位号码除最后一位外,都应return errorInfo;}// =======================(end)========================// ================ 出生年月是否有效 ================String strYear = Ai.substring(6, 10);// 年份String strMonth = Ai.substring(10, 12);// 月份String strDay = Ai.substring(12, 14);// 月份if (isDate(strYear + "-" + strMonth + "-" + strDay) == false) {errorInfo = "身份证生日无效。";return errorInfo;}GregorianCalendar gc = new GregorianCalendar();SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");if ((gc.get(Calendar.YEAR)s.parse(strYear + "-" + strMonth + "-" + strDay).getTime()) < 0) {errorInfo = "身份证生日不在有效范围。";

return errorInfo;}if (Integer.parseInt(strMonth) > 12 || Integer.parseInt(strMonth) == 0) {errorInfo = "身份证月份无效";return errorInfo;}if (Integer.parseInt(strDay) > 31 || Integer.parseInt(strDay) == 0) {errorInfo = "身份证日期无效";return errorInfo;}// =====================(end)=====================// ================ 地区码时候有效 ================Hashtable h = GetAreaCode();if (h.get(Ai.substring(0, 2)) == null) {errorInfo = "身份证地区编码错误。";return errorInfo;}// // ================ 判断最后一位的值 ================int TotalmulAiWi = 0;for (int i = 0; i < 17; i++) {TotalmulAiWi = TotalmulAiWi+ Integer.parseInt(String.valueOf(Ai.charAt(i)))* Integer.parseInt(Wi[i]);}int modValue = TotalmulAiWi % 11;String strVerifyCode = ValCodeArr[modValue];Ai = Ai + strVerifyCode;//x必须为大写if (IDStr.length() == 18) {if (Ai.equals(IDStr) == false) {errorInfo = "身份证无效,不是合法的身份证号码";return errorInfo;}} else {return "";}// =====================(end)=====================return "";}/**

* 功能:设置地区编码* @return Hashtable 对象*/private static Hashtable GetAreaCode() {Hashtable hashtable = new Hashtable();hashtable.put("11", "北京");hashtable.put("12", "天津");hashtable.put("13", "河北");hashtable.put("14", "山西");hashtable.put("15", "内蒙古");hashtable.put("21", "辽宁");hashtable.put("22", "吉林");hashtable.put("23", "黑龙江");hashtable.put("31", "上海");hashtable.put("32", "江苏");hashtable.put("33", "浙江");hashtable.put("34", "安徽");hashtable.put("35", "福建");hashtable.put("36", "江西");hashtable.put("37", "山东");hashtable.put("41", "河南");hashtable.put("42", "湖北");hashtable.put("43", "湖南");hashtable.put("44", "广东");hashtable.put("45", "广西");hashtable.put("46", "海南");hashtable.put("50", "重庆");hashtable.put("51", "四川");hashtable.put("52", "贵州");hashtable.put("53", "云南");hashtable.put("54", "西藏");hashtable.put("61", "陕西");hashtable.put("62", "甘肃");hashtable.put("63", "青海");hashtable.put("64", "宁夏");hashtable.put("65", "新疆");hashtable.put("71", "台湾");hashtable.put("81", "香港");hashtable.put("82", "澳门");hashtable.put("91", "国外");return hashtable;}/**

* 功能:判断字符串是否为数字

* @param str

* @return

*/

private static boolean isNumeric(String str) {

Pattern pattern = Pattern.compile("[0-9]*");

Matcher isNum = pattern.matcher(str);

if (isNum.matches()) {

return true;

} else {

return false;

}

}

/**

* 功能:判断字符串是否为日期格式

* @param str

* @return

*/

public static boolean isDate(String strDate) {

Pattern pattern = Pattern

.compile("^((d{2}(([02468][048])|([13579][26]))[-/s]?((((0?[13578])|(1[02]))[-/s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[-/s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[-/s]?((0?[1-9])|([1-2][0-9])))))|(d{2}(([02468][1235679])|([13579][01345789]))[-/s]?((((0?[13578])|(1[02]))[-/s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|

(11))[-/s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[-/s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(s(((0?[0-9])|([1-2][0-3])):([0-5]?[0-9])((s)|(:([0-5]?[0-9])))))?$");

Matcher m = pattern.matcher(strDate);

if (m.matches()) {

return true;

} else {

return false;

}

}

/**

* 顺序码味12-15或者14-17 为 1表示男,0表示女

* @param id 身份证号

* @return

*/

public static int getSex(String id) {

String num = "";

if (id.length() == 15) {

num = id.substring(12, 15);

}

if (id.length() == 18) {

num = id.substring(14, 17);

}

int p = Integer.parseInt(num);

return p % 2;

}

/**

* @param args

* @throws ParseException

*/

public static void main(String[] args) throws ParseException {// String IDCardNum="210102820826411";// String IDCardNum="210102198208264114";String IDCardNum = "430921198907201343";//IdHolder cc = new IdHolder();

System.out.println(IdHolder.IDCardValidate(IDCardNum));// System.out.println(cc.isDate("1996-02-29"));}

/*********************************** 身份证****************************************/

} 验证结束

第二篇:身份证号码变更证明

公民身份号码更正证明存根

№ 重号当事人姓名:

重号当事人住址: 更正前公民身份号码 : 更正后公民身份号码:

更正原因:重号/错号

申请人住址: 申请理由:

申请人签名:

经 办 人:

联系电话:更正日期:年

日 公民身份号码更正证明 № 本辖区公民 :

(曾用名

)

住址:

原使用的公民身份号码为:

系(重/错)号。根据《中华人民共和国居民身份证法》的有关规定及公民身份号码的编制原则,为确保公民身份号码的准确性和唯一性, 自

日起将原号码更正为:

特此证明

所属县区派出所 (户口专用章)

注:请为申请人办理公民身份号码变更的相关事宜。此件为原件,如需要请留存复印件。 发函单位联系电话:

公安部治安管理局制

第三篇:身份证号码含义[大全]

新的身份证为18位,老的身份证是15位。 关于身份证第18是怎么计算的,原理如下:根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。

排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

地址码(身份证前六位)表示编码对象常住户口所在县(市、旗、区)的行政区划代码。(所有区域的编码可以到这个网站http:///tjbz/index.htm 查询到最新的县及县以上的行政编码资料。)

生日期码(身份证第七位到第十四位)表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。例如:1981年05月11日就用19810511表示。

顺序码(身份证第十五位到十七位)为同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。其中第十七位奇数分给男性,偶数分给女性。

校验码(身份证最后一位)是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。 第十八位数字的计算方法为:

1.将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

2.将这17位数字和系数相乘的结果相加。

3.用加出来和除以11,看余数是多少?

4余数只可能有0 1 2 3 4 5 6 7 8 9 10这11个数字。其分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2。

5.通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2。

例如:某男性的身份证号码是34052419800101001X。我们要看看这个身份证是不是合法的身份证。 首先:我们得出,前17位的乘积和是189 然后:用189除以11得出的结果是17 + 2/11,也就是说余数是2。 最后:通过对应规则就可以知道余数2对应的数字是x。所以,这是一个合格的身份证号码。 例如:某男性的身份证号码是34052419800101001X。我们要看看这个身份证是不是合法的身份证。 首先:我们得出,前17位的乘积和是189 然后:用189除以11得出的结果是17 + 2/11,也就是说余数是

2。 最后:通过对应规则就可以知道余数2对应的数字是x。所以,这是一个合格的身份证号码。

第四篇:身份证号码的编排规则

身份证号码中这些数字是怎样排列的,每个数字表示什么意思呢?下面就让我们一起来探索其中的规律吧!新的身份证号码是由18位数字组成的,它们分别表示:

(1)前

1、2位数字表示:所在省份的代码; (2)第

3、4位数字表示:所在城市的代码; (3)第

5、6位数字表示:所在区县的代码; (4)第7~14位数字表示:出生年、月、日;

(5)第

15、16位数字表示:所在地的派出所的代码;

(6)第17位数字表示性别:奇数表示男性,偶数表示女性;

(7)第18位数字是校检码:也有的说是个人信息码,一般是随计算机的随机产生,

用来检验身份证的正确性。校检码可以是0~9的数字,有时也用x表示。

15位的身份证号 dddddd yymmdd xx p 18位的身份证号

dddddd yyyymmdd xx p y

其中dddddd为地址码(省地县三级)18位中的和15位中的不完全相同 yyyymmdd yymmdd 为出生年月日 xx顺号类编码 p性别

18位中末尾的y为校验码,将前17位的ascii码值经位移、异或运算结果不在0-9的令其为x

18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999《公民身份号码》中做了明确规定。

GB11643-1999《公民身份号码》为GB11643-1989《社会保障号码》的修订版,其中指出将原标准名称“社会保障号码”更名为“公民身份号码”,另外GB11643-1999《公民身份号码》从实施之日起代替GB11643-1989。

公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验码。其含义如下:

1. 地址码:表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。

2. 出生日期码:表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日分别用4位、2位、2位数字表示,之间不用分隔符。

3. 顺序码:表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。

校验的计算方式:

1. 对前17位数字本体码加权求和

公式为:S = Sum(Ai * Wi), i = 0, ... , 16

其中Ai表示第i位置上的身份证号码数字值,Wi表示第i位置上的加权因子,其各位对应的值依次为: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

2. 以11对计算结果取模

Y = mod(S, 11)

3. 根据模的值得到对应的校验码

对应关系为:

Y值: 0 1 2 3 4 5 6 7 8 9 10

校验码: 1 0 X 9 8 7 6 5 4 3 2

第五篇:身份证号码修改申请书

尊敬的各位领导:

学生:***,学号:********,性别:*,******年9月入学,现就读于***学院***,因学籍上得身份证号码**************是错误的,正确的身份证号码是****************7本人在**年第一次报考三级考试时发现身份证号码是错误的,于是去行政楼修改,修改成功可以报考三级,第二次2010年又因报考三级发现身份证号码没有改过来还是错误的,所以有趣行政楼找黄老师修改,黄老师说要去行政楼十楼档案室把当年入学的信息调出来复印给她,看是否是错误的,调出来的信息上面没有身份证号码,后来黄老师按照学校规定要回到原户口所在地派出所,高考学校和从县级教育招生办到省级招生办的证明,我按照黄老所说的要求千辛万苦只开到了当地派出所,学校和县教育招生办的证明,没有开到市和省级的证明。因为要开市级教育招生办的证明需要我当时高考的考试资料,因为我们县教育招生办说每年的考生很多,所以每位考生的资料只保留两年两年后就销毁了,而我办理申请已经超过三年了,所以资料被销毁了。没有当时考试资料市教育局招生办就不给开证明,没有市招生办的证明省级教育招生办就开不了。

后来我把情况和黄老师说了没办法开不了那么多的证明,黄老师说先把开好的证明给她,她先报上去看能不能修改,我从***年9月份吧所有资料交给黄老师,十月份我问黄老师可不可以修改黄老师说没有申报要和其他同学一起申报,要我等一等。十二月份我有趣问黄老师可不可以修改黄老师说可以修改具体的会打电话通知我的。快放假前几天黄老师打电话给我说寒假开学要把户口给她,办理修改身份证要用,我按照规定的时间把户口交给黄老师并填写了申请信息,2012年4月初黄老师打电话给我叫我提供近期照片,我把近期一寸照片弄成电子档的交给老师,直到现在马上要毕业了身份证号码还没修改过来。

再次向各位领导申请更正:

申请人:****

联系方式:***

申请日期***

上一篇:环保工作目标责任书下一篇:哈尔滨四维彩超检查