Oracle 组织机构代码校验函数

本文介绍了一个用于验证中国组织机构代码的Oracle PL/SQL函数。该函数通过一系列步骤检查输入代码的有效性,并根据相关标准返回验证结果。

CREATE OR REPLACE FUNCTION CHECKORGCODE(organizationCode VARCHAR2)
/*
功能:验证组织机构代码,成功返回1,失败返回0
organizationCode:要验证的组织机构代码
相关资料:
http://baike.baidu.com/view/238601.htm
*/
RETURN NUMBER AS
codeSum NUMBER(10) := 0;
code VARCHAR(100);
code_9 varchar(1);
C9 NUMBER(2);
/字符与字符的值,每个字符后两位为该字符的字符数值/
Ci CHAR(250) := ‘000101202303404505606707808909A10B11C12D13E14F15G16H17I18J19K20L21M22N23O24P25Q26R27S28T29U30V31W32X33Y34Z35’;
/前8位字符的加权因子/
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) THEN
BEGIN
RETURN 0;
END;
END IF;

code := RTRIM(LTRIM(REPLACE(organizationCode, ‘-’, ‘’))); /把-,前后空格去掉/

/验证长度是否正确/
/验证机构代码是由数字和大写字母组成/
IF (LENGTH(code) != 9 or NOT REGEXP_LIKE(code, ‘1+$’)) THEN
BEGIN
RETURN 0;
END;
END IF;

/前8位字符的字符数值分别乘于该位的加权因子,然后求和/
for i in 1 … Wi.count loop
codeSum := codeSum +
to_Number(substr(Ci, INSTR(Ci, substr(code, i, 1)) + 1, 2)) *
Wi(i);
end loop;

/* 计算校验码C9*/
C9 := 11 - (codeSum MOD 11);
code_9 := substr(code, 9, 1);

/验证校验码C9/
/*当C9的值为10时,校验码应是拉丁字母X */
/当C9的值为11时校验码应是0/
/验证第9位是否等于计算出的校验结果/
IF ((C9 = 10 and code_9 = ‘X’) or (C9 = 11 and code_9 = ‘0’) or
(code_9 = to_char(C9))) THEN
BEGIN
return 1;
END;
END IF;

RETURN 0;
EXCEPTION
WHEN OTHERS THEN
raise;
END;

文章转载:https://blog.youkuaiyun.com/u010219920/article/details/81046683


  1. A-Z0-9 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值