身份证15位转18位

create or replace function changeaac002_15to18
(
ls_card varchar2
)
return varchar2 is

ls_newcard varchar2(18);
a1 number(10);
a2 number(10);
a3 number(10);
a4 number(10);
a5 number(10);
a6 number(10);
a7 number(10);
a8 number(10);
a9 number(10);
a10 number(10);
a11 number(10);
a12 number(10);
a13 number(10);
a14 number(10);
a15 number(10);
a16 number(10);
a17 number(10);
a18 number(10);

w1 number(10);
w2 number(10);
w3 number(10);
w4 number(10);
w5 number(10);
w6 number(10);
w7 number(10);
w8 number(10);
w9 number(10);
w10 number(10);
w11 number(10);
w12 number(10);
w13 number(10);
w14 number(10);
w15 number(10);
w16 number(10);
w17 number(10);
w18 number(10);
i number(10);
v_sum number(10);
ls_final0 varchar2(18);
ls_final1 varchar2(18);
ls_final2 varchar2(18);
ls_final3 varchar2(18);
ls_final4 varchar2(18);
ls_final5 varchar2(18);
ls_final6 varchar2(18);
ls_final7 varchar2(18);
ls_final8 varchar2(18);
ls_final9 varchar2(18);
ls_final10 varchar2(18);

begin

if (length(ls_card) <> 15) then
return ls_card;
end if;

ls_newcard := substr(ls_card,1,6)||‘19‘||substr(ls_card,7,9);

a1 := to_number(substr(ls_newcard,1,1));
a2 := to_number(substr(ls_newcard,2,1));
a3 := to_number(substr(ls_newcard,3,1));
a4 := to_number(substr(ls_newcard,4,1));
a5 := to_number(substr(ls_newcard,5,1));
a6 := to_number(substr(ls_newcard,6,1));
a7 := to_number(substr(ls_newcard,7,1));
a8 := to_number(substr(ls_newcard,8,1));
a9 := to_number(substr(ls_newcard,9,1));
a10 := to_number(substr(ls_newcard,10,1));
a11 := to_number(substr(ls_newcard,11,1));
a12 := to_number(substr(ls_newcard,12,1));
a13 := to_number(substr(ls_newcard,13,1));
a14 := to_number(substr(ls_newcard,14,1));
a15 := to_number(substr(ls_newcard,15,1));
a16 := to_number(substr(ls_newcard,16,1));
a17 := to_number(substr(ls_newcard,17,1));

w1 := 7 ;
w2 := 9 ;
w3 :=10 ;
w4 := 5 ;
w5 := 8 ;
w6 := 4 ;
w7 := 2 ;
w8 := 1 ;
w9 := 6 ;
w10 := 3 ;
w11 := 7 ;
w12 := 9 ;
w13 :=10 ;
w14 := 5 ;
w15 := 8 ;
w16 := 4 ;
w17 := 2 ;
w18 := 1 ;

ls_final0 := ‘1‘;
ls_final1 := ‘0‘;
ls_final2 := ‘X‘;
ls_final3 := ‘9‘;
ls_final4 := ‘8‘;
ls_final5 := ‘7‘;
ls_final6 := ‘6‘;
ls_final7 := ‘5‘;
ls_final8 := ‘4‘;
ls_final9 := ‘3‘;
ls_final10 :=‘2‘;

v_sum := 0;
v_sum := v_sum + a1*w1;
v_sum := v_sum + a2*w2;
v_sum := v_sum + a3*w3;
v_sum := v_sum + a4*w4;
v_sum := v_sum + a5*w5;
v_sum := v_sum + a6*w6;
v_sum := v_sum + a7*w7;
v_sum := v_sum + a8*w8;
v_sum := v_sum + a9*w9;
v_sum := v_sum + a10*w10;
v_sum := v_sum + a11*w11;
v_sum := v_sum + a12*w12;
v_sum := v_sum + a13*w13;
v_sum := v_sum + a14*w14;
v_sum := v_sum + a15*w15;
v_sum := v_sum + a16*w16;
v_sum := v_sum + a17*w17;

i := mod(v_sum,11);
if i = 0 then
ls_newcard := ls_newcard||ls_final0;
elsif i = 1 then
ls_newcard := ls_newcard|| ls_final1;
elsif i = 2 then
ls_newcard := ls_newcard|| ls_final2;
elsif i = 3 then
ls_newcard := ls_newcard|| ls_final3;
elsif i = 4 then
ls_newcard := ls_newcard|| ls_final4;
elsif i = 5 then
ls_newcard := ls_newcard|| ls_final5;
elsif i = 6 then
ls_newcard := ls_newcard|| ls_final6;
elsif i = 7 then
ls_newcard := ls_newcard|| ls_final7;
elsif i = 8 then
ls_newcard := ls_newcard|| ls_final8;
elsif i = 9 then
ls_newcard := ls_newcard|| ls_final9;
elsif i = 10 then
ls_newcard := ls_newcard|| ls_final10;
end if;

return ls_newcard;

exception when others then
return ls_card ;

end ;

原文地址:https://www.cnblogs.com/xunyi/p/11594188.html

时间: 2024-07-29 14:51:13

身份证15位转18位的相关文章

做一个牛XX的身份证号验证类(支持15位和18位)

原文:做一个牛XX的身份证号验证类(支持15位和18位) #region 是否合法的中国身份证号码 protected bool IsChineseID() { if (str.Length == 15) str = CidUpdate(str); if (str.Length == 18) { string strResult = CheckCidInfo(str); if (strResult == "非法地区" || strResult == "非法生日" |

身份证号码15位转18位 C#实现

[身份证最后一位神秘X的由来]身份证中的“冷知识”1999年的今天,<国务院关于实行公民身份号码制度的决定>被发布,当年10月1日实施.为什么有的有X?这位数是根据前17位计算出的校验码.如某人尾号是0-9,不会有X,如是10,则用X代替.Ⅹ是罗马数字的10,这能保证身份证号不多位. /// <summary> /// 转换15位身份证号码为18位 /// </summary> /// <param name="oldIDCard">15

java中身份证号15位转18位

/** * 将15位转换为18位 * @param idCode 15位身份证号 * @return String 18位身份证号 */ public String toEighteen(String idCode) { idCode = idCode.substring(0, 6) + "19" + idCode.substring(6);//加入年份,变成17位 //计算校验位 begin char[] Ai = idCode.toCharArray(); int[] Wi = {

身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X

function checkIdCardNo(idCardNo) { // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/; if (reg.test(idCardNo) === false) { wx.showToast({ title: '身份证号码不正确!', icon: 'none', }) return false; }

php 验证身份证有效性,根据国家标准GB 11643-1999 15位和18位通用

//验证身份证是否有效 function validateIDCard($IDCard) { if (strlen($IDCard) == 18) { return check18IDCard($IDCard); } elseif ((strlen($IDCard) == 15)) { $IDCard = convertIDCard15to18($IDCard); return check18IDCard($IDCard); } else { return false; } } //计算身份证的

简单的关于身份证(15位或者18位)合法性验证

package com.clark.test.idcard; /** * 测试校验身份证合法性的小程序 * <p>我们常用的身份证号码为18位或者15位</p> <p>下面的程序仅仅用于校验18为的身份证的合法性</p> * @author caolipeng * @date 2015年1月9日 上午10:27:13 * @Version 1.0 */ public class IDCardValidator { <span style="c

身份证号码 15位和18位 验证

首先先了解 身份证号码的编码规则,从百度经验上找到了别人的分享 :http://jingyan.baidu.com/article/7f41ececff944a593d095c8c.html 感谢. 15位长度的验证正则是从网上找的,但发现并不是万能的(月份可以出现00,日期可以出现00等), 所以做了如下改良,但仍旧存在一些问题,如880231这样的生日也可以验证功过 所以可以考虑将身份证号码的年月日单独判断,在此略去. 18位长度的就按校验规则来校验即可. function chkIdNo(

C# 身份证号码15位和18位验证

/// <summary> /// 身份证 /// </summary> [Serializable] public class IDCard {     /// <summary>     /// 身份证号     /// </summary>     public string IDCardNum { get; set; }     /// <summary>     /// 行政区     /// </summary>     

js从字符串中提取身份证号,连续18位数字

<!DOCTYPE html> <html> <head> <title>提取身份证号</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalabl