Oracle 组织机构代码校验函数

本文介绍了一个Oracle函数,用于验证组织机构代码的有效性。该函数通过一系列复杂的计算过程来确保输入的组织机构代码符合规定的校验规则,能够帮助开发者有效识别无效的组织机构代码。

Oracle 组织机构代码校验函数实现

组织机构代码是中国大陆用于标识企业、机关、事业单位等组织的唯一标识码,由8位数字(或大写字母)和1位校验码组成。以下是Oracle数据库中实现组织机构代码校验的函数示例。

校验规则

组织机构代码的校验码计算规则如下:

  1. 前8位为本体代码,最后1位为校验码。
  2. 每位字符对应的权重因子为:3, 7, 9, 10, 5, 8, 4, 2。
  3. 计算加权和:S = Sum(Ci × Wi),其中Ci为字符对应数值,Wi为权重因子。
  4. 计算校验码:Mod = 11 - (S % 11),若Mod为10则校验码为X,若Mod为11则校验码为0,否则校验码为Mod。

Oracle函数实现

CREATE OR REPLACE FUNCTION VALIDATE_ORG_CODE(p_code IN VARCHAR2) RETURN VARCHAR2 IS
    v_code       VARCHAR2(9);
    v_weights    CONSTANT NUMBER_ARRAY := NUMBER_ARRAY(3, 7, 9, 10, 5, 8, 4, 2);
    v_sum        NUMBER := 0;
    v_mod        NUMBER;
    v_check_code CHAR;
BEGIN
    -- 检查输入长度是否为9
    IF LENGTH(p_code) <> 9 THEN
        RETURN 'N';
    END IF;
    
    -- 转换为大写并检查前8位是否为字母或数字
    v_code := UPPER(p_code);
    FOR i IN 1..8 LOOP
        IF NOT REGEXP_LIKE(SUBSTR(v_code, i, 1), '^[A-Z0-9]$') THEN
            RETURN 'N';
        END IF;
    END LOOP;
    
    -- 计算加权和
    FOR i IN 1..8 LOOP
        DECLARE
            v_char CHAR := SUBSTR(v_code, i, 1);
            v_val  NUMBER;
        BEGIN
            IF v_char BETWEEN '0' AND '9' THEN
                v_val := TO_NUMBER(v_char);
            ELSE -- A-Z转换为10-35
                v_val := ASCII(v_char) - ASCII('A') + 10;
            END IF;
            v_sum := v_sum + v_val * v_weights(i);
        END;
    END LOOP;
    
    -- 计算校验码
    v_mod := 11 - MOD(v_sum, 11);
    IF v_mod = 10 THEN
        v_check_code := 'X';
    ELSIF v_mod = 11 THEN
        v_check_code := '0';
    ELSE
        v_check_code := TO_CHAR(v_mod);
    END IF;
    
    -- 验证校验码
    IF SUBSTR(v_code, 9, 1) = v_check_code THEN
        RETURN 'Y';
    ELSE
        RETURN 'N';
    END IF;
END VALIDATE_ORG_CODE;
/

使用示例

-- 验证有效的组织机构代码
SELECT VALIDATE_ORG_CODE('12345678X') FROM dual; -- 返回 'Y'

-- 验证无效的组织机构代码
SELECT VALIDATE_ORG_CODE('123456789') FROM dual; -- 返回 'N'

注意事项

  1. 该函数返回’Y’表示校验通过,'N’表示校验失败。
  2. 函数对输入代码进行自动大写转换,确保字母校验正确。
  3. 函数检查输入长度是否为9位,并验证前8位是否为合法字符(数字或大写字母)。
  4. 实际应用中可能还需要检查组织机构代码是否符合其他业务规则。Oracle 组织机构代码校验函数
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值