身份证位数互换
15位身份证号码转18位算法
15位⾝份证号码转18位算法⾝份证号码15位升18位⾝份证18位验证18位⾝份证标准在国家质量技术监督局于1999年7⽉1⽇实施的GB11643-1999《公民⾝份号码》中做了明确的规定。
GB11643-1999《公民⾝份号码》为GB11643-1989《社会保障号码》的修订版,其中指出将原标准名称"社会保障号码"更名为"公民⾝份号码",另外GB11643-1999《公民⾝份号码》从实施之⽇起代替GB11643-1989。
GB11643-1999《公民⾝份号码》主要内容如下:⼀、范围该标准规定了公民⾝份号码的编码对象、号码的结构和表现形式,使每个编码对象获得⼀个唯⼀的、不变的法定号码。
⼆、编码对象公民⾝份号码的编码对象是具有中华⼈民共和国国籍的公民。
三、号码的结构和表⽰形式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四、举例如下:北京市朝阳区: 110105************⼴东省汕头市: 44052418800101001415位升18的⽅法根据〖中华⼈民共和国国家标准 GB 11643-1999〗中有关公民⾝份号码的规定,公民⾝份号码是特征组合码,由⼗七位数字本体码和⼀位数字校验码组成。
身份证数字校验码计算公式
身份证数字校验码计算公式在中国,每个人的身份证号码都是唯一的,其中包括了个人的基本信息和校验码。
校验码是身份证号码中的最后一位数字,它是根据身份证号码的前17位数字计算而得到的。
校验码的存在可以帮助验证身份证号码的有效性,防止错误或伪造的身份证号码的使用。
那么,身份证数字校验码是如何计算的呢?首先,我们需要了解身份证号码的结构。
中国的身份证号码共有18位数字,其中前17位是个人的基本信息,包括地区、出生年月日和顺序码,最后一位是校验码。
校验码的计算是通过对前17位数字进行一系列的运算得到的。
校验码的计算公式如下:1. 将身份证号码的前17位数字分别乘以对应的加权因子,然后将乘积相加。
2. 将上一步得到的结果除以11,得到余数。
3. 根据余数在一个预先设定的对照表中找到对应的校验码。
下面我们来详细解释一下这个计算公式。
首先,加权因子是一个固定的数组,分别为,7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2。
这些数字分别对应身份证号码的前17位数字,用来进行加权计算。
接下来,我们将身份证号码的前17位数字分别乘以对应的加权因子,然后将乘积相加。
假设一个身份证号码的前17位数字分别为a1、a2、a3...a17,对应的加权因子分别为w1、w2、w3...w17,那么校验码的计算公式可以表示为:S = a1w1 + a2w2 + a3w3 + ... + a17w17。
其中S表示加权计算的结果。
然后,我们将S除以11,得到余数M。
余数M的取值范围为0到10。
最后,我们根据余数M在一个对照表中找到对应的校验码。
对照表如下:0,1。
1,0。
2,X。
3,9。
4,8。
5,7。
6,6。
7,5。
8,4。
9,3。
10,2。
根据上述对照表,我们可以找到对应余数M的校验码。
通过以上的计算公式,我们可以得到身份证号码的校验码。
这个计算过程可以帮助我们验证身份证号码的有效性,防止错误或伪造的身份证号码的使用。
身份证号码18位与15位转换
身份证18位与15位转换package cn.crediteasep.tools.util;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.HashMap;import java.util.Map;import java.util.Scanner;import ng.StringUtils;/*** 身份证工具类* @author Kobe* @version 2020-08-08*/public class IdcardUtils extends StringUtils {/** 中国公民身份证号码最小长度。
*/public static final int CHINA_ID_MIN_LENGTH = 15;/** 中国公民身份证号码最大长度。
*/public static final int CHINA_ID_MAX_LENGTH = 18;/** 省、直辖市代码表*/public static final String cityCode[] = {"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"};/** 每位加权因子*/public static final int power[] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};/** 第18位校检码*/public static final String verifyCode[] = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};/** 最低年限*/public static final int MIN = 1930;public static Map<String, String> cityCodes = new HashMap<String, String>();/** 台湾身份首字母对应数字*/public static Map<String, Integer> twFirstCode = new HashMap<String, Integer>();/** 香港身份首字母对应数字*/public static Map<String, Integer> hkFirstCode = new HashMap<String, Integer>();static {cityCodes.put("11", "北京");cityCodes.put("12", "天津");cityCodes.put("13", "河北");cityCodes.put("14", "山西");cityCodes.put("15", "内蒙古");cityCodes.put("21", "辽宁");cityCodes.put("22", "吉林");cityCodes.put("23", "黑龙江");cityCodes.put("31", "上海");cityCodes.put("32", "江苏");cityCodes.put("33", "浙江");cityCodes.put("34", "安徽");cityCodes.put("35", "福建");cityCodes.put("37", "山东"); cityCodes.put("41", "河南"); cityCodes.put("42", "湖北"); cityCodes.put("43", "湖南"); cityCodes.put("44", "广东"); cityCodes.put("45", "广西"); cityCodes.put("46", "海南"); cityCodes.put("50", "重庆"); cityCodes.put("51", "四川"); cityCodes.put("52", "贵州"); cityCodes.put("53", "云南"); cityCodes.put("54", "西藏"); cityCodes.put("61", "陕西"); cityCodes.put("62", "甘肃"); cityCodes.put("63", "青海"); cityCodes.put("64", "宁夏"); cityCodes.put("65", "新疆"); cityCodes.put("71", "台湾"); cityCodes.put("81", "香港"); cityCodes.put("82", "澳门"); cityCodes.put("91", "国外");twFirstCode.put("B", 11); twFirstCode.put("C", 12); twFirstCode.put("D", 13); twFirstCode.put("E", 14); twFirstCode.put("F", 15); twFirstCode.put("G", 16); twFirstCode.put("H", 17); twFirstCode.put("J", 18); twFirstCode.put("K", 19); twFirstCode.put("L", 20); twFirstCode.put("M", 21); twFirstCode.put("N", 22); twFirstCode.put("P", 23); twFirstCode.put("Q", 24); twFirstCode.put("R", 25); twFirstCode.put("S", 26); twFirstCode.put("T", 27); twFirstCode.put("U", 28); twFirstCode.put("V", 29); twFirstCode.put("X", 30); twFirstCode.put("Y", 31);twFirstCode.put("Z", 33);twFirstCode.put("I", 34);twFirstCode.put("O", 35);hkFirstCode.put("A", 1);hkFirstCode.put("B", 2);hkFirstCode.put("C", 3);hkFirstCode.put("R", 18);hkFirstCode.put("U", 21);hkFirstCode.put("Z", 26);hkFirstCode.put("X", 24);hkFirstCode.put("W", 23);hkFirstCode.put("O", 15);hkFirstCode.put("N", 14);}/*** 将15位身份证号码转换为18位* @param idCard* 15位身份编码* @return 18位身份编码*/public static String conver15CardTo18(String idCard) {String idCard18 = "";if (idCard.length() != CHINA_ID_MIN_LENGTH) {return null;}if (isNum(idCard)) {// 获掏诞生年月日String birthday = idCard.substring(6, 12);Date birthDate = null;try {birthDate = new SimpleDateFormat("yyMMdd").parse(birthday);} catch (ParseException e) {e.printStackTrace();}Calendar cal = Calendar.getInstance();if (birthDate != null)cal.setTime(birthDate);// 获掏诞生年(完全表现形式,如:2020)String sYear = String.valueOf(cal.get(Calendar.YEAR));idCard18 = idCard.substring(0, 6) + sYear + idCard.substring(8);// 转换字符数组char[] cArr = idCard18.toCharArray();if (cArr != null) {int[] iCard = converCharToInt(cArr);int iSum17 = getPowerSum(iCard);// 获取校验位String sVal = getCheckCode18(iSum17);if (sVal.length() > 0) {idCard18 += sVal;} else {return null;}}} else {return null;}return idCard18;}/*** 将18位身份证号码转换为15位* @param idCard* 18位身份编码* @return 15位身份编码*/public static String conver18CardTo15(String idCard) { String idCard15 = "";if (idCard.length() != CHINA_ID_MAX_LENGTH) { return null;}StringBuffer sb = new StringBuffer(idCard);sb.deleteCharAt(17);sb.deleteCharAt(7);sb.deleteCharAt(6);idCard15 = sb.toString();return idCard15;}/*** 验证身份证是不是合法*/public static boolean validateCard(String idCard) { String card = idCard.trim();if (validateIdCard18(card)) {return true;}if (validateIdCard15(card)) {return true;}String[] cardval = validateIdCard10(card);if (cardval != null) {if (cardval[2].equals("true")) {return true;}}return false;}/*** 验证18位身份编码是不是合法** @param idCard 身份编码* @return 是不是合法*/public static boolean validateIdCard18(String idCard) { boolean bTrue = false;if (idCard.length() == CHINA_ID_MAX_LENGTH) { // 前17位String code17 = idCard.substring(0, 17);// 第18位String code18 = idCard.substring(17, CHINA_ID_MAX_LENGTH);if (isNum(code17)) {char[] cArr = code17.toCharArray();if (cArr != null) {int[] iCard = converCharToInt(cArr);int iSum17 = getPowerSum(iCard);// 获取校验位String val = getCheckCode18(iSum17);if (val.length() > 0) {if (val.equalsIgnoreCase(code18)) {bTrue = true;}}}}}return bTrue;}/*** 验证15位身份编码是不是合法** @param idCard* 身份编码* @return 是不是合法*/public static boolean validateIdCard15(String idCard) {if (idCard.length() != CHINA_ID_MIN_LENGTH) {return false;}if (isNum(idCard)) {String proCode = idCard.substring(0, 2);if (cityCodes.get(proCode) == null) {return false;}String birthCode = idCard.substring(6, 12);Date birthDate = null;try {birthDate = new SimpleDateFormat("yy").parse(birthCode.substring(0, 2));} catch (ParseException e) {e.printStackTrace();}Calendar cal = Calendar.getInstance();if (birthDate != null)cal.setTime(birthDate);if (!valiDate(cal.get(Calendar.YEAR), Integer.valueOf(birthCode.substring(2, 4)),Integer.valueOf(birthCode.substring(4, 6)))) {return false;}} else {return false;}return true;}/*** 验证10位身份编码是不是合法** @param idCard 身份编码* @return 身份证信息数组* <p>* [0] - 台湾、澳门、香港[1] - 性别(男M,女F,未知N) [2] - 是不是合法(合法true,不合法false)* 假设不是身份证件号码那么返回null* </p>*/public static String[] validateIdCard10(String idCard) {String[] info = new String[3];String card = idCard.replaceAll("[\\(|\\)]", "");if (card.length() != 8 && card.length() != 9 && idCard.length() != 10) { return null;}if (idCard.matches("^[a-zA-Z][0-9]{9}$")) { // 台湾info[0] = "台湾";System.out.println("11111");String char2 = idCard.substring(1, 2);if (char2.equals("1")) {info[1] = "M";System.out.println("MMMMMMM");} else if (char2.equals("2")) {info[1] = "F";System.out.println("FFFFFFF");} else {info[1] = "N";info[2] = "false";System.out.println("NNNN");return info;}info[2] = validateTWCard(idCard) ? "true" : "false";} else if (idCard.matches("^[1|5|7][0-9]{6}\\(?[0-9A-Z]\\)?$")) { // 澳门info[0] = "澳门";info[1] = "N";// TODO} else if (idCard.matches("^[A-Z]{1,2}[0-9]{6}\\(?[0-9A]\\)?$")) { // 香港info[0] = "香港";info[1] = "N";info[2] = validateHKCard(idCard) ? "true" : "false";} else {return null;}return info;}/*** 验证台湾身份证号码** @param idCard* 身份证号码* @return 验证码是不是符合*/public static boolean validateTWCard(String idCard) {String start = idCard.substring(0, 1);String mid = idCard.substring(1, 9);String end = idCard.substring(9, 10);Integer iStart = twFirstCode.get(start);Integer sum = iStart / 10 + (iStart % 10) * 9;char[] chars = mid.toCharArray();Integer iflag = 8;for (char c : chars) {sum = sum + Integer.valueOf(c + "") * iflag;iflag--;}return (sum % 10 == 0 ? 0 : (10 - sum % 10)) == Integer.valueOf(end) ? true : false;}/*** 验证香港身份证号码(存在Bug,部份特殊身份证无法检查)* <p>* 身份证前2位为英文字符,若是只显现一个英文字符那么表示第一名是空格,对应数字58 前2位英文字符A-Z别离对应数字10-35* 最后一名校验码为0-9的数字加上字符"A","A"代表10* </p>* <p>* 将身份证号码全数转换为数字,别离对应乘9-1相加的总和,整除11那么证件号码有效* </p>** @param idCard 身份证号码* @return 验证码是不是符合*/public static boolean validateHKCard(String idCard) {String card = idCard.replaceAll("[\\(|\\)]", "");Integer sum = 0;if (card.length() == 9) {sum = (Integer.valueOf(card.substring(0, 1).toUpperCase().toCharArray()[0]) - 55) * 9+ (Integer.valueOf(card.substring(1, 2).toUpperCase().toCharArray()[0]) - 55) * 8;card = card.substring(1, 9);} else {sum = 522 + (Integer.valueOf(card.substring(0, 1).toUpperCase().toCharArray()[0]) - 55) * 8;}String mid = card.substring(1, 7);String end = card.substring(7, 8);char[] chars = mid.toCharArray();Integer iflag = 7;for (char c : chars) {sum = sum + Integer.valueOf(c + "") * iflag;iflag--;}if (end.toUpperCase().equals("A")) {sum = sum + 10;} else {sum = sum + Integer.valueOf(end);}return (sum % 11 == 0) ? true : false;}/*** 将字符数组转换成数字数组** @param ca* 字符数组* @return 数字数组*/public static int[] converCharToInt(char[] ca) {int len = ca.length;int[] iArr = new int[len];try {for (int i = 0; i < len; i++) {iArr[i] = Integer.parseInt(String.valueOf(ca[i]));}} catch (NumberFormatException e) {e.printStackTrace();}return iArr;}/*** 将身份证的每位和对应位的加权因子相乘以后,再取得和值** @param iArr* @return 身份证编码。
浅谈如何将身份证号码15位转为18位
浅谈如何将身份证号码15位转为18位笔者日前参与城乡居民保险制度全覆盖审计调查,在审查参保人员是否存在重复参加城乡居保及职工养老险种情况时,发现城乡居保参保人信息中身份证号码均为18位,而职工养老参保人信息中身份证号码长度不唯一,导致无法正确比对数据。
18位身份证号码除了据原有15位基础上,在出生年月部分添加“19”外,号码最后添加一位验证码。
公安局公布的验证码算法内容概述为:将添加“19”后的17位身份证号码对应乘上系数并求和,再将系数和除11后求余数,根据余数对应选择验证码。
笔者据此编写出一套语句,内容如下:一、筛选出15位身份证号码后生成一张新表,将其转为17位1.select 公民身份号码 into 身份证号码 from dbo.个人基本信息 where len(公民身份号码)=152. alter table 身份证号码 add 公民身份号码17位varchar(20)3.update 身份证号码 set 公民身份号码17位=substring(公民身份号码,1,6)+'19'+RIGHT(公民身份号码,7)二、添加系数和、余数及验证码三列Alter table 身份证号码 add系数和 intAlter table 身份证号码 add余数 intAlter table 身份证号码 add验证码 varchar(2)三、求系数和update dbo.身份证号码 set 系数和 =cast(left(公民身份号码17位,1) as int)*7+cast(substring(公民身份号码17位,2,1) as int)*9+cast(substring(公民身份号码17位,3,1) as int)*10+cast(substring(公民身份号码17位,4,1)as int)*5+cast(substring(公民身份号码17位,5,1)as int)*8+cast(substring(公民身份号码17位,6,1)as int)*4+cast(substring(公民身份号码17位,7,1) as int)*2+cast(substring(公民身份号码17位,8,1)as int)*1+cast(substring(公民身份号码17位,9,1)asint)*6+cast(substring(公民身份号码17位,10,1)asint)*3+cast(substring(公民身份号码17位,11,1)asint)*7+cast(substring(公民身份号码17位,12,1) as int)*9+cast(substring(公民身份号码17位,13,1)asint)*10+cast(substring(公民身份号码17位,14,1)as int)*5+cast(substring(公民身份号码17位,15,1)asint)*8+cast(substring(公民身份号码17位,16,1)asint)*4+cast(substring(公民身份号码17位,17,1)as int)*2四、求余数Update 身份证号码 set 余数=系数和%11五、求验证码Update 身份证号码 set 验证码= case when 余数=0 then '1'when 余数=1 then '0'when 余数=2 then 'x'when 余数=3 then '9'when 余数=4 then '8'when 余数=5 then '7'when 余数=6 then '6'when 余数=7 then '5'when 余数=8 then '4'when 余数=9 then '3'when 余数=10 then '2' end六、更新原参保信息表Update a set a. 公民身份号码='b.公民身份号码位'+'b.验证码' from dbo.个人基本信息a,身份证号码 b where a. 公民身份号码=b. 公民身份号码。
15号身份证号码转18位批量工具表
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
#VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE!
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
#VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE! #VALUE!
15位身份证升级为18位 并查询其信息
--15位身份证升级为18位并查询其信息create or replace procedure f_changecard(p_cert_num in varchar2)asv_cert_num varchar2(30);v_type varchar2(20);v_sum varchar2(10);--v_sum_m varchar2(10);v_yu varchar2(4);v_new varchar(30);v_nian varchar(4);v_yue varchar(4);v_ri varchar(4);v_sex varchar2(2);v_sf varchar2(10);v_sf_f varchar2(4);--v_yu_y varchar2(4);beginexecute immediate'select length(:p_cert_num) from dual'into v_typeusing p_cert_num;execute immediate'select (select substr((select :p_cert_num from dual),1,6) from dual )||19||(select substr((select :p_cert_num from dual),7,9) from dual) from dual'into v_cert_numusing p_cert_num,p_cert_num;--判断身份证是否为15位if v_type<>15then dbms_output.put_line('请输入证件号为15位的身份证信息');else--校验取余v_sum:=substr(v_cert_num,1,1)*7+substr(v_cert_num,2,1)*9+substr(v_cert_num,3,1)*10+substr(v_cert_num,4,1)*5+substr(v_cert_num,5,1)*8+substr(v_cert_num,6,1)*4+substr(v_cert_num,7,1)*2+substr(v_cert_num,8,1)*1+substr(v_cert_num,9,1)*6+substr(v_cert_num,10,1)*3+substr(v_cert_num,11,1)*7+substr(v_cert_num,12,1)*9+substr(v_cert_num,13,1)*10+substr(v_cert_num,14,1)*5+substr(v_cert_num,15,1)*8+substr(v_cert_num,16,1)*4+substr(v_cert_num,17,1)*2;--取出生年月v_nian:=substr(v_cert_num,7,4);v_yue:=substr(v_cert_num,11,2);v_ri:=substr(v_cert_num,13,2);--取性别v_sex:=substr(v_cert_num,17,1);--取地区v_sf:=substr(v_cert_num,1,6);v_sf_f:=substr(v_cert_num,1,2);--7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2v_yu:=mod(v_sum,11);--0 1 2 3 4 5 6 7 8 9 10,1 0 X 9 8 7 6 5 4 3 2 --得出新18位证件号if v_yu=0then v_new:=v_cert_num||'1';elsif v_yu=1then v_new:=v_cert_num||'0';elsif v_yu=2then v_new:=v_cert_num||'X';elsif v_yu=3then v_new:=v_cert_num||'9';elsif v_yu=4then v_new:=v_cert_num||'8';elsif v_yu=5then v_new:=v_cert_num||'7';elsif v_yu=6then v_new:=v_cert_num||'6';elsif v_yu=7then v_new:=v_cert_num||'5';elsif v_yu=8then v_new:=v_cert_num||'4';elsif v_yu=9then v_new:=v_cert_num||'3';elsif v_yu=10then v_new:=v_cert_num||'2';end if;--判断新产生的18位身份证号码真伪依据月份日期判断只能。
全国身份证编码规则及6位地址码-最全最细
身份证编码规则及6位地址码编码规则公民身份号码是由17位数字码和1位校验码组成。
排列顺序从左至右分别为:6位地址码,8位出生日期码,3位顺序码和1位校验码。
地址码(身份证地址码对照表见下面附录)和出生日期码很好理解,顺序码表示在同一地址码所标识的区域范围内,对同年同月同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
身份证最后一位校验码算法如下:1. 将身份证号码前17位数分别乘以不同的系数,从第1位到第17位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 22. 将得到的17个乘积相加。
3. 将相加后的和除以11并得到余数。
4. 余数可能为0 1 2 3 4 5 6 7 8 9 10这些个数字,其对应的身份证最后一位校验码为1 0 X 9 8 7 6 5 4 3 2。
身份证号码解密|身份证尾数校验码算法身份证地址码对照表身份证编码规则及6位地址码 (1)编码规则 (1)110000 北京市 (3)120000 天津市 (4)130000 河北省 (5)140000 山西省 (13)150000 内蒙古自治区 (18)210000 辽宁省 (23)220000 吉林省 (28)230000 黑龙江省 (31)310000 上海市 (37)320000 江苏省 (38)330000 浙江省 (44)340000 安徽省 (48)350000 福建省 (54)360000 江西省 (58)370000 山东省 (63)370300 山东省淄博市 (64)410000 河南省 (70)420000 湖北省 (77)430000 湖南省 (82)440000 广东省 (88)450000 广西壮族自治区 (95)460000 海南省 (100)500000 重庆市 (102)510000 四川省 (103)520000 贵州省 (112)530000 云南省 (116)540000 西藏自治区 (122)610000 陕西省 (126)。
中国身份证编码规则
中国身份证编码规则中国身份证编码规则第二代公民身份证号码共18位,排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验码。
其含义如下:一、第1至6位为地址码,表示这个人常住户口所在县(市、旗、区)的行政区划代码。
前2位代表具体省(直辖市,自治区,特别行政区),代码如下:11-15 京津冀晋蒙,21-23辽吉黑,31-37沪苏浙皖闽赣鲁,41-46 豫鄂湘粤桂琼,50-54渝川贵云藏,61-65陕甘青宁新,81-82港澳。
第3、4位是:城市代码,第5、6位是区、县代码。
二、第7至14位是出生日期码,表示出生的年、月、日,年、月、日分别用4位、2位(不足两位加0)、2(同上)位数字表示。
三、第15至17位是顺序码:表示在同一地址码所表示的范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
四、最后一位是校验码,通过前17位数字根据一定计算得出,计算方式如下:1、对前17位数字分别乘一个因数再求和,所乘因数见下表.位数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17因数 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2例如,某身份号码前17位是34052419800101001,则3*7+4*9+0*10+5*5+…+1*2 = 189。
2、第1步求得的和除以11求余数。
例如189÷ 11余数是2。
3、根据余数查下面的表,得到对应的校验码。
(其中x代表罗马数字中的10)余数 0 1 2 3 4 5 6 7 8 9 10校验码 1 0 X 9 8 7 6 5 4 3 2根据上表,查出余数为2的校验码为X,所以该人员的公民身份号码应该为340524************。
第一代公民身份证号码只有15位。
出生日期码只有6位,年月日各两位,没有校验码。
18位身份证号码转换成出生日期的函数公式
18位身份证号码转换成出生日期的函数公式:如果E2中是身份证,在F2中求出出生日期,F2=DATE(MIDB(E2,7,4),MIDB(E2,11,2),MIDB(E2,13,2)) 自动录入男女:=IF(MOD((IF(LEN(e2)=18,MID(e2,17,1),MID(e2,15,1))) ,2)= 0,"女","男") 根据身份证号快速录入男女性别“记住”15/18位都可以的公式:转换出生日期:=IF(LEN(e2)=18,TEXT(MID(e2,7,8),"#-00-00"),"19"&TE XT(MID(e2,7,6),"#-00-00"))自动录入男女:=IF(E2="","",IF(MOD(RIGHT(LEFT(E2,17),1),2)=0,"女","男"))计算年龄(新旧身份证号都可以):=IF(AND(E2=""),"",IF(MIDB(E2,7,2)="19",107-MIDB(E2 ,9,2 ),107-MIDB(E2,7,2)))WPS表格提取身份证详细信息前些天领导要求统计所有员工的性别、出生日期、年龄等信息,并且要得很急。
而我们单位员工人数众多。
短时间内统计相关信息并且输入计算机几乎是不太可能的。
幸好在以前的一份金山表格中我们曾经统计有所有员工的身份证号码,而身份证中正有我们所需要的性别、出生日期、年龄等信息的。
所以。
干脆,还是直接在金山表格中从身份证号码提取相关的信息吧。
身份证号放在A2单元格以下的青岛DNA检测单位区域。
我们需要从身份证号码中提取性别、出生日期、年龄等相关信息。
由于现在使用的身份证有15位和18位两种。
Python3身份证号升位
Python3⾝份证号升位⾝份证号升位描述第⼆代居民⾝份证是依据2003年6⽉28⽇第⼗届全国⼈⼤常委会第3次会议通过的《中华⼈民共和国居民⾝份证法》实施的。
第⼀代⾝份证⼗五位数升为第⼆代⾝份证⼗⼋位数的⼀般规则是:第⼀步,在原⼗五位数⾝份证的第六位数后⾯插⼊19 (1905年1⽉1⽇以后出⽣)或20(2000.1.1-2004.12.31出⽣),这样⾝份证号码即为⼗七位数;第⼆步,按照国家规定的统⼀公式计算出第⼗⼋位数,作为校验码放在第⼆代⾝份证的尾号。
校验码计算⽅法:将⾝份证前⼗七位数分别乘以不同系数并求和S = Sum(Ai * Wi)Ai:表⽰第i位置上的⾝份证号码数字值, i = 0, ... , 16Wi:表⽰第i位置上的加权因⼦,Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2S对11取模得到余数0-10,对应的校验码如下:余数 Y: 0 1 2 3 4 5 6 7 8 9 10校验码: 1 0 X 9 8 7 6 5 4 3 2#题⽬假设所有⼈均出⽣于1905年1⽉1⽇以后,2005年1⽉1⽇以前输⼊格式输⼊⼀个15位⾝份证号输出格式输出⼀个18位⾝份证号输⼊输出⽰例输⼊ 输出310112********* 310112************代码Y = {0:'1',1:'0',2:'X',3:'9',4:'8',5:'7',6:'6',7:'5',8:'4',9:'3',10:'2'}Wi = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]id = input()if int(id[6:8]) < 5:id = id[0:6]+"20"+id[6:]else:id = id[0:6]+"19"+id[6:]s = 0for i in range(0,17):s = s + int(id[i]) * Wi[i]id = id + Y[s%11]print(id)。
身份证号码变更申请书
尊敬的户籍管理部门:您好!我是户籍地位于[详细地址]的居民,身份证号码为[原身份证号码]。
鉴于以下原因,特向贵部门申请变更我的身份证号码,恳请予以审批。
一、变更原因1. 信息错误:在我出生时,由于户籍登记人员操作失误,导致我的身份证号码中部分数字错误,给我的日常生活和工作带来诸多不便。
如银行开户、网上购物等均因身份证号码错误无法正常操作。
2. 重号现象:经过查询,发现我的身份证号码与我国某地一名居民的身份证号码完全相同,存在重号现象。
为避免日后因重号引发的法律纠纷,保障我的合法权益,特申请变更身份证号码。
3. 个人隐私保护:近年来,随着互联网的发展,个人信息泄露事件频发。
为保护我的个人隐私,避免身份证号码被不法分子利用,我决定申请变更身份证号码。
二、变更过程1. 我已按照贵部门要求,向当地派出所提交了相关证明材料,包括出生证明、户口簿等,以证明我的身份信息。
2. 我已向当地派出所申请办理了变更身份证号码的手续,并按照要求缴纳了相关费用。
3. 我已按照贵部门要求,将变更后的身份证号码在银行、社保、运营商等相关单位进行了更新。
三、变更后的身份证号码使用承诺1. 我承诺在变更后的身份证号码正式启用后,严格遵守我国法律法规,妥善保管身份证,确保个人信息安全。
2. 我承诺在办理各类业务时,使用变更后的身份证号码,并积极配合相关部门的查验。
3. 我承诺在变更后的身份证号码使用过程中,如发现任何问题,将立即向贵部门报告,并积极配合处理。
综上所述,鉴于以上原因,我恳请贵部门审批我的身份证号码变更申请。
如有需要,我将积极配合贵部门进行调查核实,确保变更过程的顺利进行。
此致敬礼!申请人:[姓名]联系电话:[手机号码]申请日期:[年月日]。