oracle营业执照代码校验函数
时间: 2023-08-06 13:03:01 浏览: 68
以下是一个 Oracle 营业执照代码校验函数的示例:
```sql
CREATE OR REPLACE FUNCTION check_license_code(p_license_code IN VARCHAR2) RETURN VARCHAR2 IS
v_license_code VARCHAR2(15) := UPPER(p_license_code);
v_check_code CHAR(1);
v_weight_array CONSTANT VARCHAR2(10) := '123456789ABCDEFGHJKLMNPQRTUWXY';
v_weight_num_array CONSTANT VARCHAR2(10) := '31791065432';
BEGIN
-- 校验长度和字符合法性
IF LENGTH(v_license_code) <> 15 OR REGEXP_LIKE(v_license_code, '[^0-9A-Z]') THEN
RETURN 'INVALID_LICENSE_CODE';
END IF;
-- 计算校验码
v_check_code := v_weight_array(MOD(SUM(DECODE(SUBSTR(v_license_code, LEVEL, 1), v_weight_array, INSTR(v_weight_array, SUBSTR(v_license_code, LEVEL, 1)), NULL) * TO_NUMBER(SUBSTR(v_weight_num_array, LEVEL, 1))), 31) + 1);
-- 检查校验码
IF SUBSTR(v_license_code, 15, 1) <> v_check_code THEN
RETURN 'INVALID_CHECK_CODE';
ELSE
RETURN 'VALID_LICENSE_CODE';
END IF;
END;
/
```
该函数接收一个营业执照代码作为参数,返回一个字符串,表示校验结果。如果营业执照代码不符合规则,则返回 "INVALID_LICENSE_CODE",如果校验码不正确,则返回 "INVALID_CHECK_CODE",否则返回 "VALID_LICENSE_CODE"。使用该函数时,只需要传入营业执照代码即可。例如:
```sql
SELECT check_license_code('123456789012345') FROM DUAL;
-- 返回 'INVALID_LICENSE_CODE'
SELECT check_license_code('1234567890123456') FROM DUAL;
-- 返回 'INVALID_LICENSE_CODE'
SELECT check_license_code('1234567890123456A') FROM DUAL;
-- 返回 'VALID_LICENSE_CODE'
SELECT check_license_code('1234567890123456B') FROM DUAL;
-- 返回 'INVALID_CHECK_CODE'
```
注意,在实际应用中,可能需要根据具体要求对该函数进行调整。