Oracle统一社会信用代码校验函数

Oracle统一社会信用代码校验函数
摘要由CSDN通过智能技术生成
create or replace function fn_socialunicodecheck(i_socialuicode varchar2)
  return number is
  res             number;
  v_socialunicode varchar2(18 char);
  type arraytype is varray(31) of char(1);
  alphaarray arraytype;
  i          number(2) := 0;
  checksum   number(10) := 0;
  v          number(10);
  checkcode  char(1);
begin
  /*统一社会信用代码由18位阿拉伯数字或英文大写字母表示(不包括I,O,Z,S,V以防止和阿拉伯字母混淆)
   *第1位是登记管理部门代码 第2位是机构类别代码,第3-8位是登记管理机关行政区划代码,第9-17是主体标识码(组织机构代码)
   *第18位是校验码,具体规范请见《GB 32100-2015 法人和其他组织统一社会信用代码编码规则》
   *举例select fn_socialunicodecheck('12320700139008349D') from dual;
    作者:秀峰  xiufeng.zhang@outlook.com  QQ:823291475  2018-8-8 原创

    v_socialunicode 由 varchar2(18) 改为varchar2(18 char) by 周壮伟
    20210826 补充登记机关管理区划代码必须为数字
  */

  if length(i_socialuicode) != 18 or i_socialuicode is null then
    return 0;
  end if;

    v_socialunicode := upper(i_socialuicode);
   
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个 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' ``` 注意,在实际应用中,可能需要根据具体要求对该函数进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值