15位身份证升级18位尾数号码计算器
网上服务平台“身份证号码升位”操作指南
网上服务平台“身份证号码升位”操作指南一、总体操作流程首先,通过“人员管理”模块下“在职人员身份证号升位”功能和“离退休人员身份证号升位”功能分别对本单位在职、退休人员的15位身份证号进行升位。
其次,升位成功后,通过“数据交互”模块下“数据交互”功能进行数据上报。
最后,携带相关资料到经办机构进行审核。
二、在职人员身份号码升位第一步,点击“在职人员身份证号升位”功能。
第二步,选择导盘类型为“导出”,点击“查询”按钮。
这里会将本单位下所有在职身份证号为15位的人员列出,并按照公安部门规则对其分别拟生成18位身份证号信息。
第三步,点击“生成”按钮。
这里有两个列表,“身份证号码升位成功信息”列表展示的是所有15位身份证号可以按照公安部门规则生成18位身份证号的信息内容。
“身份证号码升位失败信息”列表展示的是不能按照公安部门规则生成18位身份证号的信息内容。
第四步,导出升级成功信息。
导出内容为excel表格,将其保存下来。
第五步,对导出的excel表格进行编辑。
表格中将本单位户下身份证号为15位人员以及对应的拟升位信息列示出来。
大家需要完成工作有:1、将拟生成身份证号升位信息逐一进行核对。
2、保留核对正确的人员信息,删除核对不正确人员信息。
3、全部核对完成后,将修改后的文件予以保存。
第六步,点击“在职人员身份证号升位”功能,将导盘类型选择为“导入”。
在导入文件处,通过浏览选择已进行核对的excel表格,并点击“查询”按钮。
这里“身份证升位成功信息”列表展示就是本单位经核对后保留的拟升位信息。
点击“确定”按钮,导入成功。
第七步,点击“数据上报”功能。
“待上报业务信息汇总列表”列示的为拟上报信息,如果上报前发现报送内容有误,可通过进行撤销。
如果无误,点击“数据上报”按钮,并携带相关资料到经办机构进行审核。
三、离退休人员身份号码升位通过“离退休人员身份号码升位”功能进行离退人员15位身份证号升18位,具体操作,同“在职人员身份号码升位”操作步骤。
身份证15位变18位
#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! #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! #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! #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! #VALUE!
身份证15位转18位(SQL函数)
⾝份证15位转18位(SQL函数)USE [您的数据库名]GO/****** Object: UserDefinedFunction [dbo].[get18id] Script Date: 10/10/2014 16:32:15 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Author:-- Create date:-- Description:-- =============================================CREATE FUNCTION [dbo].[get18id](-- Add the parameters for the function here@id nvarchar(18))RETURNS nvarchar(18)ASBEGIN-- Declare the return variable hereDECLARE @myresult nvarchar(18),@ids nvarchar(17),@idindex int,@idsum int,@idcharnumber tinyint,@idmod int,@idlast char-- check input rightif(@id is null or @id='')beginRETURN nullendif(LEN(@id)<>15)beginif(LEN(@id)<>18)beginreturn nullendreturn @idendset @idindex=1;-- birthday year defoult is '19'set @ids=SUBSTRING(@id,1,6)+'19'+SUBSTRING(@id,7,9);--RETURN @ids;while(@idindex<=18)beginset @idcharnumber=convert(tinyint,SUBSTRING(@ids,@idindex,1));--return @idcharnumber;--print @idcharnumber+'\n';if(@idindex=1)beginset @idsum=7*@idcharnumber;--return @idsum;endelse if(@idindex=2)beginset @idsum+=9*@idcharnumber;endelse if(@idindex=3)beginset @idsum+=10*@idcharnumber; endelse if(@idindex=4)beginset @idsum+=5*@idcharnumber; endelse if(@idindex=5)beginset @idsum+=8*@idcharnumber; endelse if(@idindex=6)beginset @idsum+=4*@idcharnumber; endelse if(@idindex=7)beginset @idsum+=2*@idcharnumber; endelse if(@idindex=8)beginset @idsum+=1*@idcharnumber; endelse if(@idindex=9)beginset @idsum+=6*@idcharnumber; endelse if(@idindex=10)beginset @idsum+=3*@idcharnumber; endelse if(@idindex=11)beginset @idsum+=7*@idcharnumber; endelse if(@idindex=12)beginset @idsum+=9*@idcharnumber; endelse if(@idindex=13)beginset @idsum+=10*@idcharnumber; endelse if(@idindex=14)beginset @idsum+=5*@idcharnumber; endelse if(@idindex=15)beginset @idsum+=8*@idcharnumber; endelse if(@idindex=16)beginset @idsum+=4*@idcharnumber; endelse if(@idindex=17)beginset @idsum+=2*@idcharnumber; endset @idindex=@idindex+1;--break;end--return @idsum;set @idmod=@idsum%11;if(@idmod=0)beginset @idlast='1';endelse if(@idmod=1)beginset @idlast='0';endelse if(@idmod=2)beginset @idlast='X';endelse if(@idmod=3)beginset @idlast='9';endelse if(@idmod=4)beginset @idlast='8';endelse if(@idmod=5)beginset @idlast='7';endelse if(@idmod=6)beginset @idlast='6';endelse if(@idmod=7)beginset @idlast='5';endelse if(@idmod=8)beginset @idlast='4';endelse if(@idmod=9)beginset @idlast='3';endelse if(@idmod=10)beginset @idlast='2';endset @myresult=@ids+@idlast; -- Return the result of the function RETURN @myresultENDGO。
身份证号码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 身份证编码。
DB215位身份证号转18位函数
set v_res =v_res + (substr(v_sfz,i,1)*decode(i,1,7,2,9,3,10,4,5,5,8,6,4,7,2,8,1,9,6,10,3,11,7,12,9,13,10,14,5,15,8,16,4 ,17,2));
set i =i + 1;
LANGUAGE SQL
BEGIN ATBiblioteka MIC/*定义变量部分*/
DECLARE v_sfz VARCHAR (20);---转换后身份证号
DECLARE v_no VARCHAR (15);---传入15位身份证号
declare i integer default 1;---递增变量
declare v_res integer default 0;---逻辑处理变量
set V_jym = decode(v_res,0,'1',1,'0',2,'X',3,'9',4,'8',5,'7',6,'6',7,'5',8,'4',9,'3',10,'2');
setv_sfz = CONCAT(v_sfz,V_jym);
/*返回结果部分*/
RETURN v_sfz;
END;
DECLARE V_jym CHARACTER(1);---校验码
/*逻辑处理部分*/
/*1、6位日期转换为8位日期*/
SET v_no = OLD_NO;
SET v_sfz = substr (v_no, 1, 6)||'19'||substr (v_no, 7, 9);
15位数身份证升级方法
15位数身份证升级方法第一步:身份证号码数据挪到A列,插入一列空白列B列,B1输入=LEN(A1)后向下拉。
筛选出15位的老身份证重新做个表第二步:身份证号码数据挪到A列,插入一列空白列B列,B1输入公式=IF(LEN(A1)=15,CONCATENATE(MID(A1,1,6),"19",MID(A1,7, 9),MID("10X98765432",MOD(MID(A1,1,1)*7+MID(A1,2,1)*9+MID(A1,3,1)*10+MID(A1,4,1)*5 +MID(A1,5,1)*8+MID(A1 ,6,1)*4+1*2+9*1+MID(A1,7,1)*6+MID( A1,8,1)*3+MID(A1,9,1)*7+MID(A1,10,1)*9+MID(A1,11,1)*10+MID(A1,12,1)*5+MID(A1,13,1)*8+MID(A1,14,1)*4+MID(A1,15,1)*2,11)+1,1)),A1) 这样15位身份证号码就变成了18位。
这个表保存好设为:表一(后面VLOOKUP函数用的上)第三步:将做好的身份信息进行批量联网核查。
第四步:批量联网核查正确的即可做远程授权核实:有两个方法:一、在60465里面直接输入15位身份证号,18位数的减成15位的大家肯定都会输二、如果想在60465里面输客户号,可用VOOKLUP函数在第二步“表一”里面将客户号对应。
VLOOKUP函数用法不好描述请百度(提示:在验证公式正确性时,很多身份证号通过这个公式错了,有可能是倒第二位数字本来网点原来就录错了与公式无关。
)参考资料:公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。
排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码B2=RIGHT(A2,1)例如身份证号在A2单元,在B2单元格用上述函数可以取出身份号尾数的X,然后向下拖就可以取出所有的尾数X。
一代身份证转二代身份证【批量15位转18位】公式备份,有用的
#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! #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! #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!
EXCEL中批量将15位身份证号码变更为18位身份证号码
EXCEL中批量将15位身份证号码变更为18位身份证号码一、假设15位号码在C列,在D列中输入数组公式(公式输入后须同时按下Ctrl+Shift+Enter组合键方可完成):=IF(LEN(D6)=15,REPLACE(D6,7,,19)&MID("10X98765432",MOD(SUM(MID( REPLACE(D6,7,,19),ROW(INDIRECT("1:17")),1)*2^(18-ROW(INDIRECT("1 :17")))),11)+1,1),D6)二、15位的老身份证号码插入年份即可升到17位,假设15位号码在C 列,在D列输入公式=IF(LEN(C6)=15,MID(C6,1,6)&"19"&MID(C6,7,9))就可以在年份前添加19。
假设17位号码在C列,在D列中输入数组公式(公式输入后须同时按下Ctrl+Shift+Enter组合键方可完成):=C6&LOOKUP(MOD(SUM(MID(C6,ROW($1:$17),1)*MOD(2^(18-ROW($1:$17)) ,11)),11),{0,1,2,3,4,5,6,7,8,9,10},{1,0,"X",9,8,7,6,5,4,3,2})即可得到18位(上述公式为函数大师陈军的作品)。
参考资料:公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。
排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
校验方法:(1)十七位数字本体码加权求和公式S = Sum(A i * 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。
15位身份证升级为18位 并查询其信息
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位身份证号码真伪依据月份日期判断只能。