Oracle 组织机构代码校验函数
生活随笔
收集整理的這篇文章主要介紹了
Oracle 组织机构代码校验函数
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Oracle 組織機(jī)構(gòu)代碼校驗(yàn)函數(shù)
CREATE OR REPLACE FUNCTION CHECKORGCODE(organizationCode VARCHAR2) /*功能:驗(yàn)證組織機(jī)構(gòu)代碼,成功返回1,失敗返回0organizationCode:要驗(yàn)證的組織機(jī)構(gòu)代碼相關(guān)資料:http://baike.baidu.com/view/238601.htm*/RETURN NUMBER AScodeSum NUMBER(10) := 0;code VARCHAR(100);code_9 varchar(1);C9 NUMBER(2);/*字符與字符的值,每個(gè)字符后兩位為該字符的字符數(shù)值*/Ci CHAR(250) := '000101202303404505606707808909A10B11C12D13E14F15G16H17I18J19K20L21M22N23O24P25Q26R27S28T29U30V31W32X33Y34Z35';/*前8位字符的加權(quán)因子*/type v_ar is varray(10) of number;Wi v_ar := v_ar(3, 7, 9, 10, 5, 8, 4, 2); BEGIN/*判斷是否為null*/IF (organizationCode is NULL) THENBEGINRETURN 0;END;END IF;code := RTRIM(LTRIM(REPLACE(organizationCode, '-', ''))); /*把-,前后空格去掉*//*驗(yàn)證長度是否正確*//*驗(yàn)證機(jī)構(gòu)代碼是由數(shù)字和大寫字母組成*/IF (LENGTH(code) != 9 or NOT REGEXP_LIKE(code, '^[A-Z0-9]+$')) THENBEGINRETURN 0;END;END IF;/*前8位字符的字符數(shù)值分別乘于該位的加權(quán)因子,然后求和*/for i in 1 .. Wi.count loopcodeSum := codeSum +to_Number(substr(Ci, INSTR(Ci, substr(code, i, 1)) + 1, 2)) *Wi(i);end loop;/* 計(jì)算校驗(yàn)碼C9*/C9 := 11 - (codeSum MOD 11);code_9 := substr(code, 9, 1);/*驗(yàn)證校驗(yàn)碼C9*//*當(dāng)C9的值為10時(shí),校驗(yàn)碼應(yīng)是拉丁字母X *//*當(dāng)C9的值為11時(shí)校驗(yàn)碼應(yīng)是0*//*驗(yàn)證第9位是否等于計(jì)算出的校驗(yàn)結(jié)果*/IF ((C9 = 10 and code_9 = 'X') or (C9 = 11 and code_9 = '0') or(code_9 = to_char(C9))) THENBEGINreturn 1;END;END IF;RETURN 0; EXCEPTIONWHEN OTHERS THENraise; END;總結(jié)
以上是生活随笔為你收集整理的Oracle 组织机构代码校验函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTML和CSS简单整理
- 下一篇: Unity抽奖转盘