Oracle实现身份证校验功能

合集下载

Oracle的操作系统身份认证

Oracle的操作系统身份认证
oracle安装用户本地sqlplus “/ as sysdba”无法登录
非oracle安装用户本机sqlplus “sys/change_on_install as sysdba”能登录
非oracle安装用户远程sqlplus “/ as sysdba_on_install@sid as sysdba”能登录
os认证:如果启用了os认证,以sysdba登录,那么我们只要用oracle软件的安装用户就能登录:sqlplus “/ as sysdba”。如果我们要禁用os认证,只利用密码文件登录,我们首先要有一个密码文件:
orapwd file=C:\oracle\product\10.2.0\db_1\database\PWDoralocal.ora password=maximo entries=10;
设置初始化参数 REMOTE_LOGIN_PASSWORDFILE :
在 Oracle 数据库实例的初始化参数文件中,此参数控制着密码文件的使用及其状态。它可以有以下几个选项:
1、NONE :指示 Oracle 系统不使用密码文件,特权用户的登录通过操作系统进行身份验证;
2、EXCLUSIVE :指示只有一个数据库实例可以使用此密码文件。只有在此设置下的密码文件可以包含有除 SYS 以外的用户信息,即允许将系统权限 SYSOPER /SYSDBA 授予除 SYS 以外的其他用户。此设置oracle 9i中为缺省值。有朋友说是shared,其实不然.
(3)REMOTE_LOGIN_NTICATION_SERVICES= (NTS):
oracle安装用户本地sqlplus “/ as sysdba”能登录
非oracle安装用户本机sqlplus “sys/change_on_install as sysdba”无法登录

Java实现身份证校验(包括校验码地区时间)

Java实现身份证校验(包括校验码地区时间)

Java实现⾝份证校验(包括校验码地区时间)public class IdCardUtils {//⾝份证前1位每位加权因⼦private static int[] power = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};//⾝份证第18位校检码private static String[] refNumber ={"1", "0", "X", "9", "8", "7", "6", "5", "4", "3"};//省(直辖市)代码表private static String provinceCode[] = { "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 boolean checkIdCard(String idCard) {return checkCardIdLastNum(idCard) && (isValidDate(idCard.substring(6, 14))&& (checkProvinceId(idCard.substring(0, 2)) && isCardId(idCard)));}public static boolean isCardId(String cardid){return Pattern.matches("^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([\\d|x|X]{1})$", cardid);}/*** 检查⾝份证的省份信息是否正确(使⽤与18/15位⾝份证)* @param provinceId* @return*/public static boolean checkProvinceId(String provinceId){for (String id : provinceCode) {if (id.equals(provinceId)) {return true;}}return false;}/*** 校验⾝份证第18位是否正确(只适合18位⾝份证)* @param cardId* @return*/public static boolean checkCardIdLastNum(String cardId){if(cardId.length() != 18){return false;}char[] tmp = cardId.toCharArray();int[] cardidArray = new int[tmp.length-1];int i=0;for(i=0;i<tmp.length-1;i++){cardidArray[i] = Integer.parseInt(tmp[i]+"");}String checkCode = sumPower(cardidArray);String lastNum = tmp[tmp.length-1] + "";if(lastNum.equals("x")){lastNum = lastNum.toUpperCase();}if(!checkCode.equals(lastNum)){return false;}return true;}/*** 计算⾝份证的第⼗⼋位校验码* @param cardIdArray* @return*/public static String sumPower(int[] cardIdArray){int result = 0;本⽂作者本⽂作者: 本⽂链接:关于博主:评论和私信会在第⼀时间回复。

Oracle实现身份证校验功能

Oracle实现身份证校验功能

要求:1、‎输入一个‎18 位的‎身份证号,‎验证它的有‎效性;‎‎‎2、出生日‎期部分是有‎效的日期而‎且第18位‎校验位正确‎则为合法。

‎‎身份‎证号校验位‎算法:‎‎‎1:把前1‎7位号码从‎第高位到低‎位与下列1‎7个数字分‎别相乘求和‎(N):‎‎‎‎『2,4,‎8,5,1‎0,9,7‎,3,6,‎1,2,4‎,8,5,‎10,9,‎7』‎‎‎比‎如身份证号‎码为:C1‎C2C3…‎…C16C‎17‎‎‎则‎N=C17‎×2+C1‎6×4+…‎…+C1×‎7;‎‎ 2‎:将N除以‎11取余数‎R,根据余‎数计算校验‎位T:‎‎‎‎1)如果R‎=0,则T‎=1;如果‎R=1,则‎T=0;如‎果R=2,‎则T=X;‎‎‎‎ 2)如‎果R=3,‎则T=9;‎如果R=4‎,则T=8‎;依此类推‎……;如果‎R=10,‎则T=2;‎SE‎T SER‎V EROU‎T PUT ‎O NCR‎E ATE ‎O R RE‎P LACE‎PROC‎E DURE‎CHEC‎K_CAR‎D(p_c‎a rd_n‎u mber‎varc‎h ar2)‎ASl‎_card‎_numb‎e r va‎r char‎2(20)‎;l_c‎a rd_l‎a st ‎varc‎h ar2(‎2);l‎_card‎_str ‎ va‎r char‎2(8);‎l_ju‎d ge_s‎t r ‎v arch‎a r2(2‎0);l‎_judg‎e_r ‎ va‎r char‎2(2);‎l_ju‎d ge_t‎‎v arch‎a r2(2‎);l_‎c ount‎‎ num‎b er(6‎);l_‎c ard_‎d ate ‎ dat‎e;BE‎G INl‎_card‎_numb‎e r:=t‎r im(p‎_card‎_numb‎e r);‎l_car‎d_las‎t:=tr‎i m(su‎b str(‎l_car‎d_num‎b er,1‎8,1))‎;l_j‎u dge_‎s tr:=‎t rim(‎'2485‎10973‎61248‎51097‎');l‎_card‎_str:‎=trim‎(subs‎t r(l_‎c ard_‎n umbe‎r,7,8‎));l‎_card‎_date‎:=tri‎m(to_‎d ate(‎l_car‎d_str‎,'yyy‎y mmdd‎'));‎i f le‎n gth(‎l_car‎d_num‎b er)<‎>18 t‎h en‎ db‎m s_ou‎t put.‎p ut_l‎i ne('‎身份证位数‎不对,请输‎入18位的‎身份证号码‎!');‎e lse‎ l‎_coun‎t:=‎ (s‎u bstr‎(l_ca‎r d_nu‎m ber,‎17,1)‎* sub‎s tr(l‎_judg‎e_str‎,1,1)‎+‎ sub‎s tr(l‎_card‎_numb‎e r,16‎,1)* ‎s ubst‎r(l_j‎u dge_‎s tr,2‎,1)+‎‎s ubst‎r(l_c‎a rd_n‎u mber‎,15,1‎)* su‎b str(‎l_jud‎g e_st‎r,3,1‎)+‎ su‎b str(‎l_car‎d_num‎b er,1‎4,1)*‎subs‎t r(l_‎j udge‎_str,‎4,1)+‎‎subs‎t r(l_‎c ard_‎n umbe‎r,13,‎1)* s‎u bstr‎(l_ju‎d ge_s‎t r,5,‎2)+‎ s‎u bstr‎(l_ca‎r d_nu‎m ber,‎12,1)‎* sub‎s tr(l‎_judg‎e_str‎,7,1)‎+‎ sub‎s tr(l‎_card‎_numb‎e r,11‎,1)* ‎s ubst‎r(l_j‎u dge_‎s tr,8‎,1)+‎‎s ubst‎r(l_c‎a rd_n‎u mber‎,10,1‎)* su‎b str(‎l_jud‎g e_st‎r,9,1‎)+‎ su‎b str(‎l_car‎d_num‎b er,9‎,1) *‎subs‎t r(l_‎j udge‎_str,‎10,1)‎+‎ sub‎s tr(l‎_card‎_numb‎e r,8,‎1) * ‎s ubst‎r(l_j‎u dge_‎s tr,1‎1,1)+‎‎subs‎t r(l_‎c ard_‎n umbe‎r,7,1‎) * s‎u bstr‎(l_ju‎d ge_s‎t r,12‎,1)+ ‎‎s ubst‎r(l_c‎a rd_n‎u mber‎,6,1)‎* su‎b str(‎l_jud‎g e_st‎r,13,‎1)+ ‎ s‎u bstr‎(l_ca‎r d_nu‎m ber,‎5,1) ‎* sub‎s tr(l‎_judg‎e_str‎,14,1‎)+ ‎ su‎b str(‎l_car‎d_num‎b er,4‎,1) *‎subs‎t r(l_‎j udge‎_str,‎15,1)‎+‎ sub‎s tr(l‎_card‎_numb‎e r,3,‎1) * ‎s ubst‎r(l_j‎u dge_‎s tr,1‎6,2)+‎‎subs‎t r(l_‎c ard_‎n umbe‎r,2,1‎) * s‎u bstr‎(l_ju‎d ge_s‎t r,18‎,1)+ ‎‎s ubst‎r(l_c‎a rd_n‎u mber‎,1,1)‎* su‎b str(‎l_jud‎g e_st‎r,19,‎1)); ‎ l‎_judg‎e_r:=‎l_cou‎n t mo‎d 11;‎‎i f l_‎j udge‎_r=0 ‎t hen‎‎ l_j‎u dge_‎t:=1;‎‎e lsif‎l_ju‎d ge_r‎=1 th‎e n‎‎l_jud‎g e_t:‎=0;‎ el‎s if l‎_judg‎e_r=2‎then‎‎ l_‎j udge‎_t:='‎x';‎ el‎s if l‎_judg‎e_r=3‎then‎‎ l_‎j udge‎_t:=9‎;‎elsi‎f l_j‎u dge_‎r=4 t‎h en‎‎l_ju‎d ge_t‎:=8;‎ e‎l sif ‎l_jud‎g e_r=‎5 the‎n‎ l‎_judg‎e_t:=‎7;‎ els‎i f l_‎j udge‎_r=6 ‎t hen‎‎ l_j‎u dge_‎t:=6;‎‎e lsif‎l_ju‎d ge_r‎=7 th‎e n‎‎l_jud‎g e_t:‎=5;‎ el‎s if l‎_judg‎e_r=8‎then‎‎ l_‎j udge‎_t:=4‎;‎elsi‎f l_j‎u dge_‎r=9 t‎h en‎‎l_ju‎d ge_t‎:=3;‎ e‎l sif ‎l_jud‎g e_r=‎10 th‎e n‎‎l_jud‎g e_t:‎=2;‎ en‎d if;‎‎i f l_‎c ard_‎l ast=‎l_jud‎g e_t ‎t hen‎‎d bms_‎o utpu‎t.put‎_line‎('身份证‎合法');‎‎e lse‎‎d bms_‎o utpu‎t.put‎_line‎('身份证‎不合法')‎;‎end ‎i f;e‎n d if‎;EXC‎E PTIO‎NWHE‎N OTH‎E RS T‎H EN‎ dbm‎s_out‎p ut.p‎u t_li‎n e('身‎份证日期不‎正确');‎-‎-dbms‎_outp‎u t.pu‎t_lin‎e(sql‎e rrm)‎;END‎CHEC‎K_CAR‎D;/‎SQL>‎EXEC‎CHEC‎K_CAR‎D('51‎30105‎19850‎91500‎0'); ‎‎‎身份证位数‎不对,请输‎入18位的‎身份证号码‎!PL/‎S QL p‎r oced‎u re s‎u cces‎s full‎y com‎p lete‎dSQ‎L> EX‎E C CH‎E CK_C‎A RD('‎41105‎19850‎23016‎04');‎‎‎身份证日‎期不正确‎P L/SQ‎L pro‎c edur‎e suc‎c essf‎u lly ‎c ompl‎e ted‎SQL>‎EXEC‎CHEC‎K_CAR‎D('91‎00231‎97608‎12161‎5'); ‎‎‎身份证不合‎法PL/‎S QL p‎r oced‎u re s‎u cces‎s full‎y com‎p lete‎d身份‎证合法的结‎果自己试试‎吧!如‎果哪里不正‎确还烦请朋‎友多多指教‎!‎。

EXcel_VBA身份证号码验证

EXcel_VBA身份证号码验证

'身份证号码验证Public Function identi_check(identitynum As String) '身份证号码验证Dim jyw As Longidenti = Replace(identitynum, " ", "")If (Len(identi) > 0 And Len(identi) < 15) Or Len(identi) > 18 Thenidenti = "不正确,非15、18位"ElseIf Len(identi) = 0 Thenidenti = "不正确,为空"ElseIf Len(identi) = 15 Thenj = 0For i = 1 To 15If Not Mid(identi, i, 1) Like "[0-9]" Thenj = j + 1End IfNext iIf j > 0 Thenidenti = "不正确,包含非数字"ElseIf Val(Mid(identi, 9, 2)) > 12 Thenidenti = "不正确,月份大于12"ElseIf Val(Mid(identi, 11, 2)) > 31 Thenidenti = "不正确,日期大于31"'MsgBox identiElseidenti = ""End IfElseIf Len(identi) = 18 Then'For i = 1 To 17jyw = (Mid(identi, 1, 1) * 7 + Mid(identi, 2, 1) * 9 + Mid(identi, 3, 1) * 10 _+ Mid(identi, 4, 1) * 5 + Mid(identi, 5, 1) * 8 + Mid(identi, 6, 1) * 4 _+ Mid(identi, 7, 1) * 2 + Mid(identi, 8, 1) * 1 + Mid(identi, 9, 1) * 6 + Mid(identi, 10, 1) * 3 _+ Mid(identi, 11, 1) * 7 + Mid(identi, 12, 1) * 9 + Mid(identi, 13, 1) * 10 + Mid(identi, 14, 1) * 5 _+ Mid(identi, 15, 1) * 8 + Mid(identi, 16, 1) * 4 + Mid(identi, 17, 1) * 2)jyw = jyw Mod 11yzm = Replace("1 0 X 9 8 7 6 5 4 3 2", " ", "")If Mid(yzm, jyw + 1, 1) <> Mid(identi, 18, 1) Thenidenti = "不正确"Elseidenti = ""End If'7 9 10 5 8 4'2 1 6 3 7 9 10 5'8 4 2'Next iEnd Ifidenti_check = identi'MsgBox "yyy" & identi 'Return (identitynum) End Function。

oracle 检查约束条件写法

oracle 检查约束条件写法

oracle 检查约束条件写法Oracle检查约束是数据库中的一种强大功能,它可以帮助我们确保数据的完整性和一致性。

本文将详细介绍Oracle检查约束的编写方法。

一、检查约束的基本概念Oracle检查约束是一种在插入或更新数据时对数据进行验证的约束类型。

它可以帮助我们确保数据的准确性、完整性和一致性。

检查约束通常与表或列一起使用,可以在创建表或修改表时定义。

二、检查约束的语法以下是一个简单的Oracle检查约束的语法:```CONSTRAINT 约束名CHECK ( 条件表达式)```其中:- 约束名:检查约束的名称,用于在创建表或修改表时引用的名称。

- CHECK:关键字,表示这是一个检查约束。

- 条件表达式:一个或多个Oracle查询或算术表达式,用于验证数据的合法性。

三、检查约束的使用场景1. 确保数据的唯yi性:例如,我们可以使用检查约束来确保员工的身份证号是唯yi的不重复的值。

```CREATE TABLE employees (id NUMBER PRIMARY KEY,employee_id NUMBER,CONSTRAINT unique_employee_id CHECK (employee_id IN (SELECT employee_id FROM employees WHERE id = employee_id)));```2. 确保数据的范围:例如,我们可以使用检查约束来确保日期的范围在有效的日期范围内。

```CREATE TABLE orders (order_id NUMBER PRIMARY KEY,order_date DATE,CONSTRAINT valid_date CHECK (order_date BETWEEN TO_DATE('1990-01-01', 'yyyy-dd-mm') AND TO_DATE('2020-12-31', 'yyyy-dd-mm')));```3. 确保数据的准确性:例如,我们可以使用检查约束来确保员工的工资在有效的范围内。

Oracle查询表里的重复数据方法

Oracle查询表里的重复数据方法

Oracle查询表⾥的重复数据⽅法⼀、背景 ⼀张person表,有id和name的两个字段,id是唯⼀的不允许重复,id相同则认为是重复的记录。

⼆、解决 select id from group by id having count(*) > 1 按照id分组并计数,某个id号那⼀组的数量超过1条则认为重复。

如何查询重复的数据select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1PS:将上⾯的>号改为=号就可以查询出没有重复的数据了。

Oracle删除重复数据的SQL(删除所有):删除重复数据的基本结构写法:想要删除这些重复的数据,可以使⽤下⾯语句进⾏删除delete from 表名 a where 字段1,字段2 in(select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1)上⾯的SQL注意:语句⾮常简单,就是将查询到的数据删除掉。

不过这种删除执⾏的效率⾮常低,对于⼤数据量来说,可能会将数据库吊死。

建议先将查询到的重复的数据插⼊到⼀个临时表中,然后对进⾏删除,这样,执⾏删除的时候就不⽤再进⾏⼀次查询了。

如下:CREATE TABLE 临时表 AS (select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1)上⾯这句话就是建⽴了临时表,并将查询到的数据插⼊其中。

下⾯就可以进⾏这样的删除操作了:delete from 表名 a where 字段1,字段2 in (select 字段1,字段2 from 临时表);Oracle删除重复数据的SQL(留下⼀条记录):oracle中,有个隐藏了⾃动rowid,⾥⾯给每条记录⼀个唯⼀的rowid,我们如果想保留最新的⼀条记录,我们就可以利⽤这个字段,保留重复数据中rowid最⼤的⼀条记录就可以了。

oracle 两种或两种以上组合的鉴别技术

oracle 两种或两种以上组合的鉴别技术

oracle 两种或两种以上组合的鉴别技术
Oracle提供了多种鉴别技术用于确保数据库用户的身份认证和
授权安全,以下是Oracle中两种或两种以上组合的鉴别技术:
1. 用户名密码鉴别:是最常见的鉴别技术,用户在登录时需要提供正确的用户名和密码来进行身份认证。

Oracle数据库会检查提供的用户名和密码是否匹配数据库中存储的用户凭证信息来确定身份。

2. 口令文件鉴别:在某些情况下,Oracle数据库可以使用一个
额外的密码文件来进行鉴别。

这个密码文件存储了用户的用户名和密码信息,用户需要使用指定的工具和权限管理这个密码文件,以确保只有具有访问权限的用户可以进行身份认证。

3. 操作系统鉴别:Oracle数据库可以与操作系统集成,使用操
作系统的身份认证机制进行鉴别。

这种鉴别技术利用操作系统验证用户身份的功能,将用户和操作系统账户进行绑定,只有具有操作系统账户权限的用户才能进行身份认证。

4. 双因素鉴别:双因素鉴别技术结合了多种鉴别因素,如用户名/密码、指纹识别、硬件令牌等。

用户在登录时需要同时提
供多种鉴别因素确保身份的安全性。

5. 数据库链接鉴别:当Oracle数据库作为被链接服务器时,
可以使用链接服务器的数据库进行鉴别。

这种鉴别技术适用于跨多个数据库的应用场景,以确保链接服务器的身份合法和安全。

这些鉴别技术可以根据实际需求进行组合使用,以提供更高级别的安全性和访问控制。

身份证正确检验及验证公式

身份证正确检验及验证公式

考据公式一=IF(LEN(H20)=18,IF(RIGHT(H20,1)="X",IF(CHOOSE(MOD(SUM(LEFT(RIGHT(H20,18) )*7 LEFT(RIGHT(H20,17))*9 LEFT(RIGHT(H20,16))*10 LEFT(RIGHT(H20,15))*5LEFT(RIGHT(H20,14))*8 LEFT(RIGHT(H20,13))*4 LEFT(RIGHT(H20,12))*2LEFT(RIGHT(H20,11))*1 LEFT(RIGHT(H20,10))*6 LEFT(RIGHT(H20,9))*3LEFT(RIGHT(H20,8))*7 LEFT(RIGHT(H20,7))*9 LEFT(RIGHT(H20,6))*10LEFT(RIGHT(H20,5))*5 LEFT(RIGHT(H20,4))*8 LEFT(RIGHT(H20,3))*4LEFT(RIGHT(H20,2))*2),11)1,1,0,"X",9,8,7,6,5,4,3,2)=LEFT(RIGHT(H20,1))," 正确! "," 出错啦!"),IF(CHOOSE(MOD(SUM(LEFT(RIGHT(H20,18))*7 LEFT(RIGHT(H20,17))*9LEFT(RIGHT(H20,16))*10 LEFT(RIGHT(H20,15))*5 LEFT(RIGHT(H20,14))*8LEFT(RIGHT(H20,13))*4 LEFT(RIGHT(H20,12))*2 LEFT(RIGHT(H20,11))*1LEFT(RIGHT(H20,10))*6 LEFT(RIGHT(H20,9))*3 LEFT(RIGHT(H20,8))*7LEFT(RIGHT(H20,7))*9 LEFT(RIGHT(H20,6))*10 LEFT(RIGHT(H20,5))*5LEFT(RIGHT(H20,4))*8 LEFT(RIGHT(H20,3))*4 LEFT(RIGHT(H20,2))*2),11)1,1,0,"X",9,8,7,6,5,4,3,2)=LEFT(RIGHT(H20,1))*1," 正确! "," 出错啦!")),IF(LEN(H20)=15," 老号,请注意! ",IF(LEN(H20)=0," 缺号码 "," 位数不对! ")))考据公式二=MID("10X98765432",MOD(SUMPRODUCT(MID(H20,ROW(INDIRECT("1:17")),1)*2^(18 -ROW(INDIRECT("1:17")))),11) 1,1)=RIGHT(H20,1)身份证有 15 位和 18 位两种,身份证位数可否正确,我们能够用LEN函数判断。

居民身份证验证安全控制模块接口API使用手册

居民身份证验证安全控制模块接口API使用手册

V2.0.2.0
1.前言
本手册是居民身份证验证安全控制模块(以下有时以 SAM_A 指代)接口 API 的使用说 明,适用于版本号为 2.0.2.0 的 API 动态库(sdtapi.dll)。
2.系统要求
使用本动态库的 PC 机,必须满足下列条件: Windows 98,Windows 2000 Pro,Windows 2000 Server,WindowsXP; 至少一个空闲普通串口或 USB 口。
5.API 调用说明................................................................................................................................. 12 5.1 调用顺序................................................................................................................................. 12 5.2 C 语言示例程序 ...................................................................................................................... 12
居民身份证验证安全控制模块接口 API 使用手册
数据通信科学技术研究所
2012 年 12 月
居民身份证验证安全控制模块接口 API 使用手册
V2.0.2.0
数据通信科学技术研究所
居民身份证验证安全控制模块接口
API使用手册

Oracle按身份证号得到省市、性别、年龄的示例代码

Oracle按身份证号得到省市、性别、年龄的示例代码

Oracle按⾝份证号得到省市、性别、年龄的⽰例代码1、通过⾝份证号查询所在省市SELECTcount(*) as total,case substr(t.CERTNO,0,2)when '11' then '北京市'when '12' then '天津市'when '13' then '河北省'when '14' then '⼭西省'when '15' then '内蒙古⾃治区'when '21' then '辽宁省'when '22' then '吉林省'when '23' then '⿊龙江省'when '31' then '上海市'when '32' then '江苏省'when '33' then '浙江省'when '34' then '安徽省'when '35' then '福建省'when '36' then '江西省'when '37' then '⼭东省'when '41' then '河南省'when '42' then '湖北省'when '43' then '湖南省'when '44' then '⼴东省'when '45' then '⼴西壮族⾃治区'when '46' then '海南省'when '50' then '重庆市'when '51' then '四川省'when '52' then '贵州省'when '53' then '云南省'when '54' then '西藏⾃治区'when '61' then '陕西省'when '62' then '⽢肃省'when '63' then '青海省'when '64' then '宁夏回族⾃治区'when '65' then '新疆维吾尔⾃治区'when '71' then '台湾省'when '81' then '⾹港特别⾏政区'when '82' then '澳门特别⾏政区'else '未知'end AS provinceFROM uip_bjt_userinfo tgroup by case substr(t.CERTNO,0,2)when '11' then '北京市'when '12' then '天津市'when '13' then '河北省'when '14' then '⼭西省'when '15' then '内蒙古⾃治区'when '21' then '辽宁省'when '22' then '吉林省'when '23' then '⿊龙江省'when '31' then '上海市'when '32' then '江苏省'when '33' then '浙江省'when '34' then '安徽省'when '35' then '福建省'when '36' then '江西省'when '37' then '⼭东省'when '41' then '河南省'when '42' then '湖北省'when '43' then '湖南省'when '44' then '⼴东省'when '45' then '⼴西壮族⾃治区'when '46' then '海南省'when '50' then '重庆市'when '51' then '四川省'when '52' then '贵州省'when '53' then '云南省'when '54' then '西藏⾃治区'when '61' then '陕西省'when '62' then '⽢肃省'when '63' then '青海省'when '64' then '宁夏回族⾃治区'when '65' then '新疆维吾尔⾃治区'when '71' then '台湾省'when '81' then '⾹港特别⾏政区'when '82' then '澳门特别⾏政区'else '未知'end order by province desc2、通过⾝份证号得到性别(第17位为奇数为男,偶数为⼥)selectdecode(mod(to_number(substr(eridcardnum, 17, 1)), 2),0,'⼥','男') as sexfrom uip_ca_userinfo t3、通过⾝份证号得到年龄select to_char(sysdate, 'yyyy') - substr(eridcardnum, 7, 4) as age from uip_ca_userinfo t4、通过⾝份证号统计所在年龄段的⼈数select count(t.id),casewhen to_char(sysdate, 'yyyy') - substr(eridcardnum, 7, 4) between 1 and 20 then'1-20岁'when to_char(sysdate, 'yyyy') - substr(eridcardnum, 7, 4) between 21 and 30 then'21-30岁'when to_char(sysdate, 'yyyy') - substr(eridcardnum, 7, 4) between 31 and 40 then'31-40岁'when to_char(sysdate, 'yyyy') - substr(eridcardnum, 7, 4) between 41 and 50 then'41-50岁'else'50岁以上'end as 年龄段from uip_ca_userinfo tgroup by casewhen to_char(sysdate, 'yyyy') - substr(eridcardnum, 7, 4) between 1 and 20 then'1-20岁'when to_char(sysdate, 'yyyy') - substr(eridcardnum, 7, 4) between 21 and 30 then'21-30岁'when to_char(sysdate, 'yyyy') - substr(eridcardnum, 7, 4) between 31 and 40 then'31-40岁'when to_char(sysdate, 'yyyy') - substr(eridcardnum, 7, 4) between 41 and 50 then'41-50岁'else'50岁以上'endorder by 年龄段 asc5、通过⾝份证号统计男⼥数量select count(t.id),decode(mod(to_number(substr(eridcardnum, 17, 1)), 2),0,'⼥','男') as sexfrom uip_ca_userinfo twhere to_char(sysdate, 'yyyy') - substr(eridcardnum, 7, 4) between 1 and 26group by decode(mod(to_number(substr(eridcardnum, 17, 1)), 2),0,'⼥','男')总结到此这篇关于Oracle按⾝份证号得到省市、性别、年龄的⽰例代码的⽂章就介绍到这了,更多相关oracle ⾝份证号得到省市性别年龄内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

Oracle学习笔记:使用replace、regexp_replace实现字符替换、姓名脱敏

Oracle学习笔记:使用replace、regexp_replace实现字符替换、姓名脱敏

Oracle学习笔记:使⽤replace、regexp_replace实现字符替换、姓名脱敏 在数据库中难免会遇到需要对数据进⾏脱敏的操作,⽆论是姓名,还是⾝份证号。

最近遇到⼀个需求,需要对姓名进⾏脱敏:姓名长度为2,替换为姓+*;姓名长度为3,替换中间字符为*;姓名长度为4,替换第3个字符为*; 经过⼀番搜索之后,最终找到了3种⽅式的实现,具体如下。

⼀、先查找,再替换select replace('陈宏宏',substr('陈宏宏',2,1),'*') as name from dual;注意:此种⽅法通过对第2个字符进⾏替换,如果名字为叠名,则会发⽣上述误替换情况;⼆、拼接select substr('陈宏宏',1,1)||'*'||substr('陈宏宏',3,1) as name from dual;三、使⽤regexp_replace进⾏精准替换select regexp_replace('陈宏宏','(.)','*',2,1) as name from dual;注意:regexp_replace⽀持使⽤正则表达式对字符串进⾏替换,该语句解释为从第2个字符开始,取任意1个字符,替换为*;四、完整的替换代码create table temp_cwh_002 asselect a.acc_nbr,a.act_city,a.city_name,a.number1,a.number2,case when length(a.cust_name) =2then regexp_replace(cust_name,'(.)','*',2,1)when length(a.cust_name) =3then regexp_replace(cust_name,'(.)','*',2,1)when length(a.cust_name) =4then regexp_replace(cust_name,'(.)','*',3,1)else cust_name end cust_name,a.acc_nbr2,a.param_valuefrom temp_cwh_001 awhere length(a.cust_name) <=4END 2019-01-02 16:44:13。

ORACLE查询删除重复记录三种方法

ORACLE查询删除重复记录三种方法

ORACLE查询删除重复记录三种⽅法⽐如现在有⼀⼈员表(表名:peosons)若想将姓名、⾝份证号、住址这三个字段完全相同的记录查询出来复制代码代码如下:select p1.*from persons p1,persons p2where p1.id<>p2.idand p1.cardid = p2.cardid and p1.pname = p2.pname and p1.address = p2.address可以实现上述效果.⼏个删除重复记录的SQL语句1.⽤rowid⽅法2.⽤group by⽅法3.⽤distinct⽅法1。

⽤rowid⽅法据据oracle带的rowid属性,进⾏判断,是否存在重复,语句如下:查数据:复制代码代码如下:select * from table1 a where rowid !=(select max(rowid)from table1 b where 1=1 and 2=2......)删数据:复制代码代码如下:delete from table1 a where rowid !=(select max(rowid)from table1 b where 1=1 and 2=2......)2.group by⽅法查数据:复制代码代码如下:select count(num), max(name) from student --列出重复的记录数,并列出他的name属性group by numhaving count(num) >1 --按num分组后找出表中num列重复,即出现次数⼤于⼀次删数据:复制代码代码如下:delete from studentgroup by numhaving count(num) >1这样的话就把所有重复的都删除了。

3.⽤distinct⽅法 -对于⼩的表⽐较有⽤复制代码代码如下:create table table_new as select distinct * from table1 minuxtruncate table table1;insert into table1 select * from table_new;查询及删除重复记录的⽅法⼤全1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断复制代码代码如下:select * from peoplewhere peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最⼩的记录复制代码代码如下:delete from peoplewhere peopleId in (select peopleId from people group by peopleIdhaving count(peopleId) > 1)and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)3、查找表中多余的重复记录(多个字段)复制代码代码如下:select * from vitae awhere (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)4、删除表中多余的重复记录(多个字段),只留有rowid最⼩的记录复制代码代码如下:delete from vitae awhere (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)5、查找表中多余的重复记录(多个字段),不包含rowid最⼩的记录复制代码代码如下:select * from vitae awhere (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)(⼆)⽐⽅说在A表中存在⼀个字段“name”,⽽且不同记录之间的“name”值有可能会相同,现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项;复制代码代码如下:Select Name,Count(*) From A Group By Name Having Count(*) > 1如果还查性别也相同⼤则如下:复制代码代码如下:Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1(三)⽅法⼀复制代码代码如下:declare @max integer,@id integerdeclare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) >; 1open cur_rowsfetch cur_rows into @id,@maxwhile @@fetch_status=0beginselect @max = @max -1set rowcount @maxdelete from 表名 where 主字段 = @idfetch cur_rows into @id,@maxendclose cur_rowsset rowcount 0⽅法⼆"重复记录"有两个意义上的重复记录,⼀是完全重复的记录,也即所有字段均重复的记录,⼆是部分关键字段重复的记录,⽐如Name字段重复,⽽其他字段不⼀定重复或都重复可以忽略。

用VBA构建身份证验证函数

用VBA构建身份证验证函数

用VBA构建身份证验证函数同学们在用VBA构建用户管理系统时,需要收集用户信息,在采集用户信息时,经常会遇到身份证信息输入混乱的情况,有的用户胡乱输入、有的输入明显错误,如何对身份证信息进行校验,规范输入信息呢?本节深入探讨用VBA代码进行身份证校验。

身份证号码的编码规则身份证号码共18位,由17位本体码和1位校验码组成。

1.前6位是地址码,表示登记户口时所在地的行政区划代码,依照《中华人民共和国行政区划代码》国家标准(GB/T2260)的规定执行;2.7到14位是出生年月日,采用YYYYMMDD格式;3.15到17位是顺序码,表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编订的顺序号,顺序码的奇数分配给男性,偶数分配给女性,即第17位奇数表示男性,偶数表示女性;4.第18位是校验码,采用ISO 7064:1983, MOD 11-2校验字符系统。

一代身份证与二代身份证的区别在于:1.一代身份证是15位,二代身份证是18位;2.一代身份证出生年月日采用YYMMDD格式,二代身份证出生年月日采用YYYYMMDD格式;3.一代身份证无校验码,二代身份证有校验码。

1.区划代码校验首先,把从网上下载的行政区划代码放入名为“区划代码”的工作表中,此步骤主要是校验用户输入的前6位是否在区划代码中找到。

代码如下:arr = Worksheets("区划代码").Range("a1", Worksheets("区划代码").Range("a" & Rows.Count).End(xlUp))AreaCode = Mid(MyId, 1, 6) '提取身份证前6位IsCorrect = FalseFor i = 1 To UBound(arr)If CStr(arr(i, 1)) = AreaCode ThenIsCorrect = TrueExit ForEnd IfNextIf IsCorrect = False ThenIdCardCheck = "区划代码错误"Exit FunctionEnd If2.身份证的长度验证身份证字符长度应为18位或15位,其他长度的不符合要求If Not (Len(MyId) = 18 Or Len(MyId) = 15) ThenIdCardCheck = "身份信息位数不符合要求"Exit FunctionEnd If3.验证日期字符串是否合法(1)验证身份证信息中除最后一位是否含有字符,如果含有字符,说明不合法;(2)验证日期格式是否合法。

考生身份验证终端主要技术指标

考生身份验证终端主要技术指标

考生身份验证终端主要技术指标序号设备名称项目技术要求符合人体工程学外观设计。

方便手持,并可产品规格壁挂或摆放设备用途用于采集和验证考生身份信息要求设备至少支持指纹、面部图像、身份证真伪等多种验证方式;指纹识别支持模糊验验证方式证(1:N)和逐一验证(1:1);面部图像采取后台验证方式验证时间 ?10秒/人;存储容量 ?128MB(含扩展存储)摄像头彩色内置,?130万像素*网络接口配置至少1个100M以太网接口考生身份一 *USB接口 ?1个 (USB2.0) 验证终端显示屏 ?2.7英寸彩色高清触摸液晶屏状态提示验证考生身份时,设备应有明显提示指纹头精度 ?500DPI可使用220V外接电源及可充电内置电池,内供电方式置电池独立供电应至少可支持本设备工作4小时传输方式 TCP/IP(100M),U盘模式, SD卡模式工作温度 0-45?20%-80% 工作湿度认证终端在使用外接电源或内置电池时,均功能要求应同时支持在线和离线(不接网络、计算机)两种工作方式一体化设计,要求至少配置指纹采集验证、*最低配置要求面部图像采集、二代身份证真伪识别等模块设备必须提供3年免费质保(电池及易损件1年),为保证设备的可靠性服务。

投标人为经*服务要求销商的要求提供原厂商针对本项目的唯一授权原件和售后服务承诺函,对于非唯一授权情况,将导致所持授权投标人均被拒绝。

备注:标记*的技术指标如果投标人所投设备不满足的不予以接受(不带*的指标如果不是由于技术原因,而是投标人恶意更改参数,而实际低于招标文件要求的将不予接受)。

考生身份验证系统软件需求一、总体要求:通过加强技术防范,坚持人防技防相结合,提高招生考试整体防御能力。

1.综合验证、相互校验。

考生身份验证采取指纹比对、二代正式身份证真伪识别和照片相似度比较等多重验证,验证结果进行一致性检验,综合确认考生身份。

2.指纹比对优先。

以指纹比对为主,二代正式身份证真伪识别为辅。

oracle 证书校验ssl 参数

oracle 证书校验ssl 参数

oracle 证书校验ssl 参数Oracle证书校验SSL参数包括以下内容:1. WALLET_LOCATION:指定钱包的位置,其中METHOD_DATA=(DIRECTORY=/path/to/wallet)表示钱包的路径。

2. SSL_SERVER_CERT_DN:服务器证书的DN(Distinguished Name),例如“CN=hostname,OU=Oracle,O=Oracle,L=RedwoodCity,ST=CA,C=US”。

3. SSL_SERVER_CIPHER_SUITES:服务器支持的加密套件列表,例如(SSL_RSA_WITH_AES_256_CBC_SHA,SSL_RSA_WITH_AES_128_CBC_SHA)。

4. SSL_CLIENT_AUTHENTICATION:是否启用客户端身份验证,这里设置为FALSE。

5. SSL_VERSION:SSL协议版本,可以设置为或。

6. SSL_CIPHER_SUITES:客户端支持的加密套件列表,例如(SSL_RSA_WITH_AES_256_CBC_SHA,SSL_RSA_WITH_AES_128_CBC_SHA)。

7. ENABLE:是否启用SSL认证方式,这里设置为BROKEN。

完成以上配置后,即可启用Oracle SSL认证方式。

具体命令如下:ALTER SYSTEM SET SSL_VERSION = '' SCOPE = SPFILE;ALTER SYSTEM SET SSL_CIPHER_SUITES ='SSL_RSA_WITH_AES_128_CBC_SHA' SCOPE = SPFILE;ALTER SYSTEM SET SSL_CIPHER_SUITES ='SSL_RSA_WITH_AES_256_CBC_SHA' SCOPE = SPFILE;ALTER SYSTEM SET SSL_CERTIFICATE_REVOCATION_LIST ='/path/to/crl' SCOPE = SPFILE;以上信息仅供参考,具体参数配置应参考Oracle官方文档和实际情况。

Oracle数据库的备份和恢复在公安居民身份证制证中心的应用

Oracle数据库的备份和恢复在公安居民身份证制证中心的应用
rc v r ) e o ey
5 4 警 察 技 术 2 0 / 0 76
例故 障( 电源断 电导致服务器不可用 、 P CU 故障 、O al rce的后 台进程 发生错误 )的恢复将缓 冲数
据全 部 写 入 数 据 文 件 , 以保 证 数 据 库 的 正 确 性 ,同时 回退 所 有 未 提 交 的 事 务 , 以保 证 数 据 库 的一 致 性 。整 个恢 复 过 程 由 O al 系 统 自动 完 成 ,不 需 要 数 据 库 管 rce
L L I LI 冈 网IJ 网 J L 网 网 网 U
图 1 数据库物 理结构和逻辑 结构 的关 系
逻 辑备 份 的优 点 : 速 、 作 容 易 、 与归 档 日志 相结 快 操 能
合做数据库 “ 最新状态”的恢 复 、 维护管理简单。 方便 的保存数据库逻辑结构 。 缺点: 在备份的过程 中, 数据 库必须是关闭状态 , 数据库除了备份不能做其 它工作 。
性 、增 强 数据 安 全 性 , 入 了数 据 库 备 份 与恢 复 技 术 。 引
2 、热备份 ( 联机物理备 份)
联 机 物 理 备 份 是 指 在 数 据 库 O LN N I E状 态 时 ,备
份 表空 问的所有数据文件 和单个数据文件 的过程 。具
有 不 影 响用 户 在 表 空 间上 的所 有 访 问操 作 ,数 据 可 以
逻辑结构

钫理鳍梅
Orce数据库 的备份和恢复 al
在公安居 民身份证 制证 中心 的应 用
公安部 第 一研 究所 刘 伯驹



引 言
位恢复 、 只能恢复单个时问点, 备份时刻以后 的数据无 法恢 复等 缺点 。

身份认证系统

身份认证系统

身份认证系统******身份认证系统技术方案目录1. 概述 ...........................................................3 1.1 前言 ..................................................... 3 1.2 身份认证系统用户认证需求描述 ............................. 3 1.3 身份认证系统认证解决之道 (5)1.3.1 身份认证系统的模式 (5)1.3.2 建立身份认证系统 (5)证书在身份认证系统上的安全应用........................ 6 1.3.32. 详细设计方案 ...................................................7 2.1 身份认证系统 ............................................... 7 2.2 产品设计原则 (7)2.2.1认证系统的设计原则 (7)2.2.2 网络环境设计原则....................................... 8 2.3 功能模块架构 ............................................. 9 2.4 身份认证系统功能简介 .................................... 11 2.5 身份认证系统安全性分析 . (12)2.5.1本系统安全性保护的必要性 (13)2.5.2安全性要求 (13)2.5.3安全性设计原则 (14)2.5.4安全性设计方案 ........................................ 14 2.6 身份认证系统应用开发接口 .. (16)16 2.6.1身份认证系统接口函数 ..................................2.6.2 API与身份认证系统结合开发应用系统 (16)2.7 身份认证系统使用案例 (17)3. 系统配置 .......................................................20 3.1 设备配置 (20)21. 概述1.1 前言随着网络技术的高速发展,个人和企业将越来越多地把业务活动放到网络上,因此网络的安全问题就更加关键和重要。

18位身份证和组织机构代码校验ORACLE函数

18位身份证和组织机构代码校验ORACLE函数

18位身份证和组织机构代码校验ORACLE函数第一篇:18位身份证和组织机构代码校验ORACLE函数18位身份证和组织机构代码校验ORACLE函数18位身份证和组织机构代码校验ORACLE函数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 22.以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 215位的身份证号dddddd yymmdd xx p18位的身份证号dddddd yyyymmdd xx p y其中dddddd为地址码(省地县三级)18位中的和15位中的不完全相同 yyyymmdd yymmdd 为出生年月日 xx顺号类编码 p性别18位中末尾的y为校验码,在网上可以找到算法(1)、前两个数字代表省份编码。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
l_judge_t:=9;
elsif l_judge_r=4 then
l_judge_t:=8;
elsif l_judge_r=5 then
l_judge_t:=7;
elsif l_judge_r=6 then
l_judge_t:=6;
substr(l_card_number,2,1) * substr(l_judge_str,18,1)+
substr(l_card_number,1,1) * substr(l_judge_str,19,1));
l_judge_r:=l_count mod 11;
l_card_str:=trim(substr(l_card_number,7,8));
l_card_date:=trim(to_date(l_card_str,'yyyymmdd'));
if length(l_card_number)<>18 then
dbms_output.put_line('身份证位数不对,请输入18位的身份证号码!');
substr(l_card_number,5,1) * substr(l_judge_str,14,1)+
substr(l_card_number,4,1) * substr(l_judge_str,15,1)+
substr(l_card_number,3,1) * substr(l_judge_str,16,2)+
2)如果R=3,则T=9;如果R=4,则T=8;依此类推……;如果R=10,则T=2;
SET SERVEROUTPUT ON
CREATE OR REPLACE PROCEDURE CHECK_CARD(p_card_number varchar2)
AS
l_card_number varchar2(20);
else
l_count:=
(substr(l_card_number,17,1)* substr(l_judge_str,1,1)+
substr(l_card_number,16,1)* substr(l_judge_str,2,1)+
substr(l_card_number,15,1)* substr(l_judge_str,3,1)+
身份证位数不对,请输入18位的身份证号码!
PL/SQL procedure successfully completed
SQL> EXEC CHECK_CARD('41105198502301604');
身份证日期不正确
PL/SQL procedure successfully completed
比如身份证号码为:C1C2C3……C16C17
则N=C17×2+C16×4+……+C1×7;
2:将N除以11取余数R,根据余数计算校验位T:
1)如果R=0,则T=1;如果R=1,则T=0;如果R=2,则T=X;
end if;
EXCEPTION
Wቤተ መጻሕፍቲ ባይዱEN OTHERS THEN
dbms_output.put_line('身份证日期不正确');
--dbms_output.put_line(sqlerrm);
END CHECK_CARD;
/
SQL> EXEC CHECK_CARD('513010519850915000');
substr(l_card_number,11,1)* substr(l_judge_str,8,1)+
substr(l_card_number,10,1)* substr(l_judge_str,9,1)+
substr(l_card_number,9,1) * substr(l_judge_str,10,1)+
elsif l_judge_r=7 then
l_judge_t:=5;
elsif l_judge_r=8 then
l_judge_t:=4;
elsif l_judge_r=9 then
l_judge_t:=3;
elsif l_judge_r=10 then
substr(l_card_number,8,1) * substr(l_judge_str,11,1)+
substr(l_card_number,7,1) * substr(l_judge_str,12,1)+
substr(l_card_number,6,1) * substr(l_judge_str,13,1)+
l_judge_t:=2;
end if;
if l_card_last=l_judge_t then
dbms_output.put_line('身份证合法');
else
dbms_output.put_line('身份证不合法');
end if;
l_card_last varchar2(2);
l_card_str varchar2(8);
l_judge_str varchar2(20);
l_judge_r varchar2(2);
l_judge_t varchar2(2);
l_count number(6);
l_card_date date;
BEGIN
l_card_number:=trim(p_card_number);
l_card_last:=trim(substr(l_card_number,18,1));
l_judge_str:=trim('2485109736124851097');
要求:1、输入一个 18 位的身份证号,验证它的有效性;
2、出生日期部分是有效的日期而且第18位校验位正确则为合法。
身份证号校验位算法:
1:把前17位号码从第高位到低位与下列17个数字分别相乘求和(N):
『2,4,8,5,10,9,7,3,6,1,2,4,8,5,10,9,7』
SQL> EXEC CHECK_CARD('910023197608121615');
身份证不合法
PL/SQL procedure successfully completed
身份证合法的结果自己试试吧!
如果哪里不正确还烦请朋友多多指教!
if l_judge_r=0 then
l_judge_t:=1;
elsif l_judge_r=1 then
l_judge_t:=0;
elsif l_judge_r=2 then
l_judge_t:='x';
elsif l_judge_r=3 then
substr(l_card_number,14,1)* substr(l_judge_str,4,1)+
substr(l_card_number,13,1)* substr(l_judge_str,5,2)+
substr(l_card_number,12,1)* substr(l_judge_str,7,1)+
相关文档
最新文档