GB 11714-1997 全國組織機構程式碼編制規則 DB2函式
具體規範詳見GB 11714-1997 全國組織機構程式碼編制規則.pdf
驗證ORGCODE是否合法,合法返回1,不合法返回0
形如'66195133X' 或是 '66195133-X'
組織機構程式碼是每一個機關、社會團體、企事業單位在全國範圍內唯一的、始終不變的法定程式碼標識。
最新使用的組織機構程式碼在1997年頒佈實施,由8位數字(或大寫拉丁字母)本體程式碼和1位數字(或大寫拉丁字母)校驗碼組成。本體程式碼採用系列(即分割槽段)順序編碼方法。校驗碼按下列公式計算:
8
C9 = 11 - MOD ( ∑Ci * Wi ,11) … (2)
i=1
其中:MOD —— 表示求餘函式;
i —— 表示程式碼字元從左到右位置序號;
Ci —— 表示第i位置上的程式碼字元的值,採用附錄A“程式碼字符集”所列字元;
C9 —— 表示校驗碼;
Wi —— 表示第i位置上的加權因子,其數值如下表:
i 1 2 3 4 5 6 7 8
Wi 3 7 9 10 5 8 4 2
當MOD函式值為1(即 C9 = 10)時,校驗碼用字母X表示。
DROP FUNCTION DWPROC.FUN_ORGCODE_CHK;
CREATE FUNCTION DWPROC.FUN_ORGCODE_CHK
(I_ORGCODE VARCHAR(32)
)
RETURNS INTEGER
LANGUAGE SQL
NOT DETERMINISTIC
READS SQL DATA
STATIC DISPATCH
CALLED ON NULL INPUT
EXTERNAL ACTION
INHERIT SPECIAL REGISTERS
BEGIN ATOMIC
DECLARE v_orgcode VARCHAR(32);
DECLARE v_i INTEGER DEFAULT 1;
DECLARE v_total_01 INTEGER DEFAULT 0;
DECLARE v_total_02 INTEGER DEFAULT 0;
DECLARE v_total_03 INTEGER DEFAULT 0;
DECLARE v_total_04 INTEGER DEFAULT 0;
SET v_orgcode = LTRIM(RTRIM(I_ORGCODE));
IF LENGTH(v_orgcode) = 9 THEN
WHILE v_i <= 8 DO
SET v_total_01 = MOD(Power(2, ((10 - v_i) - 1)), 11);
IF ASCII(SUBSTR(v_orgcode,v_i,1)) BETWEEN 48 AND 57 THEN
SET v_total_02 = ASCII(SUBSTR(v_orgcode,v_i,1)) - 48;
ELSEIF ASCII(SUBSTR(v_orgcode,v_i,1)) BETWEEN 65 AND 90 THEN
SET v_total_02 = ASCII(SUBSTR(v_orgcode,v_i,1)) - 55;
ELSE RETURN 0;
END IF;
SET v_total_03 = v_total_03 + v_total_01 * v_total_02;
SET v_i = v_i + 1 ;
END WHILE;
SET v_total_04 = 11 - MOD(v_total_03,11);
IF v_total_04 = 10 THEN
IF SUBSTR(v_orgcode,9,1) = 'X' THEN
RETURN 1;
ELSE RETURN 0;
END IF;
ELSEIF v_total_04 BETWEEN 0 AND 9 THEN
IF ASCII(SUBSTR(v_orgcode,9,1)) BETWEEN 48 AND 57 THEN
IF v_total_04 = ASCII(SUBSTR(v_orgcode,9,1)) - 48 THEN
RETURN 1;
ELSE RETURN 0;
END IF;
ELSE RETURN 0;
END IF;
ELSE RETURN 0;
END IF;
ELSEIF LENGTH(v_orgcode) = 10 AND SUBSTR(v_orgcode,9,1) = '-' THEN
WHILE v_i <= 8 DO
SET v_total_01 = MOD(Power(2, ((10 - v_i) - 1)), 11);
IF ASCII(SUBSTR(v_orgcode,v_i,1)) BETWEEN 48 AND 57 THEN
--CONCAT
SET v_total_02 = ASCII(SUBSTR(v_orgcode,v_i,1)) - 48;
ELSEIF ASCII(SUBSTR(v_orgcode,v_i,1)) BETWEEN 65 AND 90 THEN
SET v_total_02 = ASCII(SUBSTR(v_orgcode,v_i,1)) - 55;
ELSE RETURN 0;
END IF;
SET v_total_03 = v_total_03 + v_total_01 * v_total_02;
SET v_i = v_i + 1 ;
END WHILE;
SET v_total_04 = 11 - MOD(v_total_03,11);
IF v_total_04 = 10 THEN
IF SUBSTR(v_orgcode,10,1) = 'X' THEN
RETURN 1;
ELSE RETURN 0;
END IF;
ELSEIF v_total_04 BETWEEN 0 AND 9 THEN
IF ASCII(SUBSTR(v_orgcode,10,1)) BETWEEN 48 AND 57 THEN
IF v_total_04 = ASCII(SUBSTR(v_orgcode,10,1)) - 48 THEN
RETURN 1;
ELSE RETURN 0;
END IF;
ELSE RETURN 0;
END IF;
ELSE RETURN 0;
END IF;
ELSE RETURN 0;
END IF;
END;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12801008/viewspace-606596/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- GB 11714-1997 全國組織機構程式碼編制規則 自己寫的DB2函式DB2函式
- 重構-改善既有程式碼的設計(六)–重新組織函式函式
- 計算機程式的思維邏輯 (22) - 程式碼的組織機制計算機
- 用BEM命名規範組織CSS程式碼CSS
- 專案組織規劃的原則(轉)
- 治理結構與組織機構
- 計算機編碼規則之:Base64編碼計算機
- 組織css程式碼CSS
- PL/SQL 01 程式碼編寫規則SQL
- 組織機構與團隊
- P001-根據編碼規則自動生成ID的函式函式
- 如何組織軟體模組的程式碼結構?
- 函式組:HRGB_SSP函式
- 程式碼模型組織方式模型
- 函式呼叫規則總結函式
- php的編碼規則PHP
- 程式語言基本組成:組織結構
- js正規表示式驗證URL函式程式碼(方便多個正則對比)JS函式
- Go包-程式碼組織者Go
- 編碼規範 | Java函式優雅之道(上)Java函式
- 編碼規範 | Java函式優雅之道(下)Java函式
- C語言getgroups()函式:獲取組程式碼函式C語言函式
- C語言setgroups()函式:設定組程式碼函式C語言函式
- PL/SQL的編碼規則SQL
- 編碼規則指南(轉貼)
- mysql和oracle字串編碼轉換函式,字串轉位元組函式例子MySqlOracle字串編碼函式
- JavaScript程式碼組織結構良好的5個特點JavaScript
- GB28181協議中20位編碼規則說明協議
- 好程式設計師Java培訓分享Java函式式編碼結構程式設計師Java函式
- c函式編寫規範函式
- android jni程式碼編寫規則--整理總結Android
- 如何組織大型 Rust 程式碼庫Rust
- 上位機程式設計編碼規範程式設計
- Java原始碼的折行規則(編碼規範)Java原始碼
- 無鎖資料結構(機制篇):記憶體管理規則資料結構記憶體
- 軟體開發團隊組織機構
- LR.Java低程式碼自主搭建企業組織架構Java架構
- 主資料之編碼規則