身份證號碼驗證系統
-
CREATE OR REPLACE Function zl_sfzhy_wdj
-
(
-
ID_IN 病人資訊.身份證號%Type,
-
出生日期_In 病人資訊.出生日期%type,
-
性別_In 病人資訊.性別%type
-
) Return Varchar2 Is
-
--功能:對寫入的身份證號進行核驗,核驗透過返回身份證號,核驗失敗返回空值 王冬建 2015-12-11
-
-
--身份證校驗碼的計算方法
-
--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、透過上面得知如果餘數是3,就會在身份證的第18位數字上出現的是9。如果對應的數字是10,身份證的最後一位號碼就是羅馬數字x。
-
--例如:某男性的身份證號碼為【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。所以,可以判定這是一個正確的身份證號碼。
-
-
v_xs Varchar2(17) := '79058421637905842'; --身份證相乘係數
-
v_zhyw Varchar2(11) := '10X98765432'; --身份證最後一位
-
-
n_sfzh Number := 0; --相應位置的身份證號號碼
-
n_xcxs Number := 0; --對應位置的相乘係數數字
-
n_xsh Number := 0; --身份證乘以係數相加的和
-
n_ys Number := 0; --餘數
-
-
v_jy Varchar2(1); --校驗位
-
v_sfzh Varchar2(1); --防止身份證號最後一位是字元
-
Begin
-
--第一步,判斷身份證位數是否正確
-
If length(id_in) <> 18 Then
-
Return '';
-
End If;
-
-
--第二步,將身份證號與係數相乘,得到和
-
begin
-
For n In 1 .. 17
-
Loop
-
--獲取相應位置的身份證號號碼以及相乘係數,如果身份證號號碼為'X',則替換為0
-
n_sfzh := to_number(substr(id_in,n,1));
-
n_xcxs := Replace(to_number(substr(v_xs,n,1)),0,10);
-
-
--獲取相乘後的係數和
-
n_xsh := n_xsh + n_sfzh * n_xcxs;
-
End Loop;
-
Exception
-
When Others Then
-
Return '';
-
End;
-
-
--獲取餘數
-
n_ys := Mod(n_xsh,11);
-
-
--對身份證進行最後一位數字進行核驗
-
v_sfzh := upper(substr(id_in,18,1));
-
v_jy := substr(v_zhyw,n_ys + 1,1);
-
If v_sfzh = v_jy Then
-
-
--判斷出生日期是否正確
-
if to_char(出生日期_in,'yyyymmdd') = substr(id_in,7,8) then
-
--判斷性別是否正確
-
if 性別_In = '男' then
-
if mod(substr(id_in,17,1),2) = 1 then
-
return id_in;
-
end if;
-
else
-
if mod(substr(id_in,17,1),2) = 0 then
-
return id_in;
-
end if;
-
end if;
-
return '';
-
Else
-
return '';
-
end if;
-
Else
-
Return '';
-
End If;
-
-
Exception
-
When Others Then
-
Zl_Errorcenter(Sqlcode, Sqlerrm);
-
End zl_sfzhy_wdj;
- /
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28878983/viewspace-2133890/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PHP 驗證身份證號碼PHP
- 身份證號碼之js驗證JS
- 身份證號碼驗證演算法演算法
- js實現身份證號碼驗證JS
- 精確驗證身份證號碼程式碼
- javascript身份證號碼校驗JavaScript
- 中國身份證號驗證庫
- C++身份證號驗證C++
- C#驗證身份證號C#
- javascript實現的身份證號碼驗證程式碼JavaScript
- js正則驗證身份證號JS
- 用 python 製作全國身份證號驗證及查詢系統Python
- 作業系統身份驗證和口令檔案身份驗證總結作業系統
- javascript實現的身份證號碼合法性驗證程式碼JavaScript
- 精確驗證身份證號碼合法性程式碼例項
- swift 郵箱、密碼、手機號、身份證驗證正則Swift密碼
- Javascript使用正則驗證身份證號(簡單)JavaScript
- php與js方式驗證手機號碼和郵件地址的合法性,js驗證身份證號碼PHPJS
- java 實現從15位~18位的身份證號碼轉換,校驗中國大陸公民身份證、香港居民身份證、澳門身份證和臺灣身份證。Java
- javascript 驗證身份證JavaScript
- 身份證號碼校驗位的計算方式
- 正則實現二代身份證號碼驗證詳解
- C++身份核驗介面程式碼、身份證OCR、身份證實名認證APIC++API
- JS驗證18位身份證號的正確性JS
- 身份證驗證工具類
- 高鐵車站的身份驗證系統核心
- 身份證號碼的正規表示式及驗證詳解(JavaScript,Regex)JavaScript
- WEB身份驗證Web
- Ext實現的身份證格式驗證程式碼
- 用WPS格式轉換工具校驗身份證號碼
- win10系統驗證身份好麻煩怎麼去掉 win10取消身份驗證方法Win10
- excel身份證號提取年齡公式 身份證號碼提取精確年齡的公式Excel公式
- JS校驗身份證號的合法性JS
- 精準實現身份證號碼格式校驗程式碼例項
- Javascript 身份證號獲得出生日期、獲得性別、檢查身份證號碼JavaScript
- PHP 身份證精確匹配驗證PHP
- Oracle的身份驗證Oracle
- 支招 | 如何解決身份驗證系統安全問題