第一篇:未滿18歲的身份證號碼
18位身份證號碼各位的含義
18位身份證號碼各位的含義: 1-2位省、自治區、直轄市代碼;
3-4位地級市、盟、自治州代碼;
5-6位縣、縣級市、區代碼;
7-14位出生年月日,比如19670401代表1967年4月1日;
15-17位為順序號,是地址碼所標識的區域范圍內,對同年、月、日出生的人員編定的順序號。其中第十七位(倒數第二位)奇數分給男性,偶數分給女性。
18位為校驗碼,0-9和X。作為尾號的校驗碼,是由把前十七位數字帶入統一的公式計算出來的,計算的結果是0-10,如果某人的尾號是0-9,都不會出現X,但如果尾號是10,那么就得用X來代替,因為如果用10做尾號,那么此人的身份證就變成了19位。X是羅馬數字的10,用X來代替10。
地址碼
(身份證號碼前六位)表示編碼對象常住戶口所在縣(市、鎮、區)的行政區劃代碼。 北京市|110000,天津市|120000,河北省|130000,山西省|140000,內蒙古自治區|150000,遼寧省|210000,吉林省|220000,黑龍江省|230000,上海市|310000,江蘇省|320000,浙江省|330000,安徽省|340000,福建省|350000,江西省|360000,山東省|370000,河南省|410000,湖北省|420000,湖南省|430000,廣東省|440000,廣西壯族自治區|450000,海南省|460000,重慶市|500000,四川省|510000,貴州省|520000,云南省|530000,西藏自治區|540000,陜西省|610000,甘肅省|620000,青海省|630000,寧夏回族自治區|640000,新疆維吾爾自治區|650000,臺灣省(886)|710000,香港特別行政區(852)|810000,澳門特別行政區(853)|820000
大陸居民身份證號碼中的地址碼的數字編碼規則為:
第一位數字表示地區,1是華北,2 是東北,3是華東,4是中南,5是西南,6是西北。
第二位數字表示戶籍地所在的直轄市、省、自治區在該地區中的排位,比如在華北地區,1代表北京市,2代表天津市,3代表河北省,4代表山西省,5代表內蒙古自治區。
第三、四位數字則表示戶籍所在地的區、縣、縣級市、旗。
第五、六位數字在戶籍所在地是省、自治區的身份證號碼中表示所在地的地區或地區級市(省轄市)、盟,在戶籍地是直轄市的身份證號碼中表示所在地的歸屬,01是城市,02是農村。
校驗碼的計算方法
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位數字上出現的是 X 。如果余數是10,身份證的最后一位號碼就是羅馬數字 2 。
例如:某男性的身份證號碼為【53010219200508011x】, 我們看看這個身份證是不是合法的身份證。
首先我們得出前17位的乘積和: 【(5*7)+(3*9)+(0*10)+(1*5)+(0*8)+(2*4)+(1*2)+(9*1)+(2*6)+(0*3)+(0*7)+(5*9)+(0*10)+(8*5)+(0*8)+(1*4)+(1*2)】是189,然后用189除以11得出的結果是189/11=17----2,也就是說其余數是2。最后通過對應規則就可以知道余數2對應的檢驗碼是X。所以,可以判定這是一個正確的身份證號碼。
第二篇:18位公民身份證號碼的編排規則
18位公民身份證號碼的編排規則 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位置
上的加權因子,其各位對應的值依次為:
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公民身份證號碼按照GB11643—1999《公民身份證號碼》國家標準編制,由18位數字組成:前6位為行政區劃分代碼,第7位至14位為出生日期碼,第15位至17位為順序碼,第18位為校驗碼。
15~17位為順序號,是縣、區級政府所轄派出所的分配碼,每個派出所分配碼為10個連續號碼,例如“000-009”或“060-069”,其中單數為男性分配碼,雙數為女性分配碼,如遇同年同月同日有兩人以上時順延第
二、第
三、第
四、第五個分配碼。如:007的就是個男生 而且和他同年月日生的男生至少有兩個 他們的后四位是001* 和 003*
第18位號碼是校驗碼,目的在于檢測身份證號碼的正確性,是由計算機隨機產生的,所以不再是男性為單數,女性為雙數。
前
1、2位數字表示:所在省份的代碼; 第
3、4位數字表示:所在城市的代碼; 第
5、6位數字表示:所在區縣的代碼。
第三篇:身份證號碼驗證
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。所以,這是一個合格的身份證號碼。