18位身份證校驗演算法
身份證校驗碼演算法
身份證校驗碼產生方法:
∑(ai×Wi)(mod 11)
i: 表示號碼字元從由至左包括校驗碼在內的位置序號;
ai 表示第i位置上的號碼字元值;
Wi 第i位置上的加權因子,其數值Wi=mod(power(2,(n-1)),11)
i 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
Wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1
相應的校驗碼:
∑(ai×WI)(mod 11) 0 1 2 3 4 5 6 7 8 9 10
校驗碼字元值ai 1 0 X 9 8 7 6 5 4 3 2
CREATE OR REPLACE FUNCTION f_id_verify(pid VARCHAR2) RETURN VARCHAR2 IS
RESULT VARCHAR2(18);
TYPE char_tabletype IS TABLE OF VARCHAR2(1) NOT NULL INDEX BY BINARY_INTEGER;
TYPE num_tabletype IS TABLE OF NUMBER NOT NULL INDEX BY BINARY_INTEGER;
tab_a char_tabletype;
tab_w num_tabletype;
tab_i char_tabletype;
i NUMBER(2) := 0;
len NUMBER(2) := length(rtrim(ltrim(pid)));
sigma NUMBER(4) := 0;
BEGIN
tab_i(0) := '1';
tab_i(1) := '0';
tab_i(2) := 'x';
tab_i(3) := '9';
tab_i(4) := '8';
tab_i(5) := '7';
tab_i(6) := '6';
tab_i(7) := '5';
tab_i(8) := '4';
tab_i(9) := '3';
tab_i(10) := '2';
IF len = 18 THEN
FOR i IN 1 .. 17
LOOP
tab_w(i) := MOD(power(2, ((19 - i) - 1)), 11);
tab_a(i) := substr(pid, i, 1);
sigma := sigma + tab_w(i) * tab_a(i);
END LOOP;
RESULT := substr(pid, 1, 17) || tab_i(MOD(sigma, 11));
END IF;
RETURN(RESULT);
END f_id_verify;
/[@more@]
身份證校驗碼產生方法:
∑(ai×Wi)(mod 11)
i: 表示號碼字元從由至左包括校驗碼在內的位置序號;
ai 表示第i位置上的號碼字元值;
Wi 第i位置上的加權因子,其數值Wi=mod(power(2,(n-1)),11)
i 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
Wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1
相應的校驗碼:
∑(ai×WI)(mod 11) 0 1 2 3 4 5 6 7 8 9 10
校驗碼字元值ai 1 0 X 9 8 7 6 5 4 3 2
CREATE OR REPLACE FUNCTION f_id_verify(pid VARCHAR2) RETURN VARCHAR2 IS
RESULT VARCHAR2(18);
TYPE char_tabletype IS TABLE OF VARCHAR2(1) NOT NULL INDEX BY BINARY_INTEGER;
TYPE num_tabletype IS TABLE OF NUMBER NOT NULL INDEX BY BINARY_INTEGER;
tab_a char_tabletype;
tab_w num_tabletype;
tab_i char_tabletype;
i NUMBER(2) := 0;
len NUMBER(2) := length(rtrim(ltrim(pid)));
sigma NUMBER(4) := 0;
BEGIN
tab_i(0) := '1';
tab_i(1) := '0';
tab_i(2) := 'x';
tab_i(3) := '9';
tab_i(4) := '8';
tab_i(5) := '7';
tab_i(6) := '6';
tab_i(7) := '5';
tab_i(8) := '4';
tab_i(9) := '3';
tab_i(10) := '2';
IF len = 18 THEN
FOR i IN 1 .. 17
LOOP
tab_w(i) := MOD(power(2, ((19 - i) - 1)), 11);
tab_a(i) := substr(pid, i, 1);
sigma := sigma + tab_w(i) * tab_a(i);
END LOOP;
RESULT := substr(pid, 1, 17) || tab_i(MOD(sigma, 11));
END IF;
RETURN(RESULT);
END f_id_verify;
/[@more@]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18921899/viewspace-1017653/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PHP校驗15位和18位身份證號PHP
- 15位身份證補全為18位身份證演算法演算法
- java 實現從15位~18位的身份證號碼轉換,校驗中國大陸公民身份證、香港居民身份證、澳門身份證和臺灣身份證。Java
- 資料庫學習:查詢新身份證(18位)的校驗位(轉)資料庫
- 身份證號碼校驗位的計算方式
- 身份證15位升18位的演算法 (轉)演算法
- JS驗證18位身份證號的正確性JS
- javascript身份證號碼校驗JavaScript
- 身份證校驗碼的計算方法
- jQuery正則驗證15/18身份證jQuery
- 身份證號碼驗證演算法演算法
- JS校驗身份證號的合法性JS
- java——15位身份證號碼升級到18位Java
- PostgreSQL版的身份證號碼15位轉18位SQL
- javascript 驗證身份證JavaScript
- 演算法學習之路|檢驗身份證演算法
- 用WPS格式轉換工具校驗身份證號碼
- 在Delphi中使用正規表示式校驗身份證號
- WEB身份驗證Web
- 身份證驗證工具類
- 直播app原始碼,進行身份驗證時,檢測身份證位數夠不夠APP原始碼
- Oracle的身份驗證Oracle
- PHP 驗證身份證號碼PHP
- 中國身份證號驗證庫
- C++身份證號驗證C++
- C#驗證身份證號C#
- 精準實現身份證號碼格式校驗程式碼例項
- 身份證資訊查詢與校驗(IdCard) v1.01
- C++身份核驗介面程式碼、身份證OCR、身份證實名認證APIC++API
- 作業系統身份驗證和口令檔案身份驗證總結作業系統
- js正則驗證身份證號JS
- PHP 身份證精確匹配驗證PHP
- 身份證號碼驗證系統
- 身份證號碼之js驗證JS
- pydantic 欄位欄位校驗
- oracle常見身份驗證Oracle
- 客戶端身份驗證客戶端
- 新舊身份證合法性驗證及相互轉換演算法演算法