news 2026/5/28 14:26:56

金融基础数据——统一社会信用代码校验规则(oracle版本)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
金融基础数据——统一社会信用代码校验规则(oracle版本)

原函数:

SELECT * FROM bfd.BFD_PJRZFS WHERE 31-mod(((CASE WHEN substr(cdrzjdm,1,1)='A' THEN 10 WHEN substr(cdrzjdm,1,1)='N' THEN 22 WHEN substr(cdrzjdm,1,1)='Y' THEN 30 ELSE to_number(substr(cdrzjdm,1,1)) END )*1 +to_number(substr(cdrzjdm,2,1))*3 +to_number(substr(cdrzjdm,3,1))*9 +to_number(substr(cdrzjdm,4,1))*27 +to_number(substr(cdrzjdm,5,1))*19 +to_number(substr(cdrzjdm,6,1))*26 +to_number(substr(cdrzjdm,7,1))*16 +to_number(substr(cdrzjdm,8,1))*17 +(CASE WHEN substr(cdrzjdm,9,1)='A' THEN 10 WHEN substr(cdrzjdm,9,1)='B' THEN 11 WHEN substr(cdrzjdm,9,1)='C' THEN 12 WHEN substr(cdrzjdm,9,1)='D' THEN 13 WHEN substr(cdrzjdm,9,1)='E' THEN 14 WHEN substr(cdrzjdm,9,1)='F' THEN 15 WHEN substr(cdrzjdm,9,1)='G' THEN 16 WHEN substr(cdrzjdm,9,1)='H' THEN 17 WHEN substr(cdrzjdm,9,1)='J' THEN 18 WHEN substr(cdrzjdm,9,1)='K' THEN 19 WHEN substr(cdrzjdm,9,1)='L' THEN 20 WHEN substr(cdrzjdm,9,1)='M' THEN 21 WHEN substr(cdrzjdm,9,1)='N' THEN 22 WHEN substr(cdrzjdm,9,1)='P' THEN 23 WHEN substr(cdrzjdm,9,1)='Q' THEN 24 WHEN substr(cdrzjdm,9,1)='R' THEN 25 WHEN substr(cdrzjdm,9,1)='T' THEN 26 WHEN substr(cdrzjdm,9,1)='U' THEN 27 WHEN substr(cdrzjdm,9,1)='W' THEN 28 WHEN substr(cdrzjdm,9,1)='X' THEN 29 WHEN substr(cdrzjdm,9,1)='Y' THEN 30 ELSE to_number(substr(cdrzjdm,9,1)) END )*20 +(CASE WHEN substr(cdrzjdm,10,1)='A' THEN 10 WHEN substr(cdrzjdm,10,1)='B' THEN 11 WHEN substr(cdrzjdm,10,1)='C' THEN 12 WHEN substr(cdrzjdm,10,1)='D' THEN 13 WHEN substr(cdrzjdm,10,1)='E' THEN 14 WHEN substr(cdrzjdm,10,1)='F' THEN 15 WHEN substr(cdrzjdm,10,1)='G' THEN 16 WHEN substr(cdrzjdm,10,1)='H' THEN 17 WHEN substr(cdrzjdm,10,1)='J' THEN 18 WHEN substr(cdrzjdm,10,1)='K' THEN 19 WHEN substr(cdrzjdm,10,1)='L' THEN 20 WHEN substr(cdrzjdm,10,1)='M' THEN 21 WHEN substr(cdrzjdm,10,1)='N' THEN 22 WHEN substr(cdrzjdm,10,1)='P' THEN 23 WHEN substr(cdrzjdm,10,1)='Q' THEN 24 WHEN substr(cdrzjdm,10,1)='R' THEN 25 WHEN substr(cdrzjdm,10,1)='T' THEN 26 WHEN substr(cdrzjdm,10,1)='U' THEN 27 WHEN substr(cdrzjdm,10,1)='W' THEN 28 WHEN substr(cdrzjdm,10,1)='X' THEN 29 WHEN substr(cdrzjdm,10,1)='Y' THEN 30 ELSE to_number(substr(cdrzjdm,10,1)) END )*29 +(CASE WHEN substr(cdrzjdm,11,1)='A' THEN 10 WHEN substr(cdrzjdm,11,1)='B' THEN 11 WHEN substr(cdrzjdm,11,1)='C' THEN 12 WHEN substr(cdrzjdm,11,1)='D' THEN 13 WHEN substr(cdrzjdm,11,1)='E' THEN 14 WHEN substr(cdrzjdm,11,1)='F' THEN 15 WHEN substr(cdrzjdm,11,1)='G' THEN 16 WHEN substr(cdrzjdm,11,1)='H' THEN 17 WHEN substr(cdrzjdm,11,1)='J' THEN 18 WHEN substr(cdrzjdm,11,1)='K' THEN 19 WHEN substr(cdrzjdm,11,1)='L' THEN 20 WHEN substr(cdrzjdm,11,1)='M' THEN 21 WHEN substr(cdrzjdm,11,1)='N' THEN 22 WHEN substr(cdrzjdm,11,1)='P' THEN 23 WHEN substr(cdrzjdm,11,1)='Q' THEN 24 WHEN substr(cdrzjdm,11,1)='R' THEN 25 WHEN substr(cdrzjdm,11,1)='T' THEN 26 WHEN substr(cdrzjdm,11,1)='U' THEN 27 WHEN substr(cdrzjdm,11,1)='W' THEN 28 WHEN substr(cdrzjdm,11,1)='X' THEN 29 WHEN substr(cdrzjdm,11,1)='Y' THEN 30 ELSE to_number(substr(cdrzjdm,11,1)) END )*25 +(CASE WHEN substr(cdrzjdm,12,1)='A' THEN 10 WHEN substr(cdrzjdm,12,1)='B' THEN 11 WHEN substr(cdrzjdm,12,1)='C' THEN 12 WHEN substr(cdrzjdm,12,1)='D' THEN 13 WHEN substr(cdrzjdm,12,1)='E' THEN 14 WHEN substr(cdrzjdm,12,1)='F' THEN 15 WHEN substr(cdrzjdm,12,1)='G' THEN 16 WHEN substr(cdrzjdm,12,1)='H' THEN 17 WHEN substr(cdrzjdm,12,1)='J' THEN 18 WHEN substr(cdrzjdm,12,1)='K' THEN 19 WHEN substr(cdrzjdm,12,1)='L' THEN 20 WHEN substr(cdrzjdm,12,1)='M' THEN 21 WHEN substr(cdrzjdm,12,1)='N' THEN 22 WHEN substr(cdrzjdm,12,1)='P' THEN 23 WHEN substr(cdrzjdm,12,1)='Q' THEN 24 WHEN substr(cdrzjdm,12,1)='R' THEN 25 WHEN substr(cdrzjdm,12,1)='T' THEN 26 WHEN substr(cdrzjdm,12,1)='U' THEN 27 WHEN substr(cdrzjdm,12,1)='W' THEN 28 WHEN substr(cdrzjdm,12,1)='X' THEN 29 WHEN substr(cdrzjdm,12,1)='Y' THEN 30 ELSE to_number(substr(cdrzjdm,12,1)) END )*13 +(CASE WHEN substr(cdrzjdm,13,1)='A' THEN 10 WHEN substr(cdrzjdm,13,1)='B' THEN 11 WHEN substr(cdrzjdm,13,1)='C' THEN 12 WHEN substr(cdrzjdm,13,1)='D' THEN 13 WHEN substr(cdrzjdm,13,1)='E' THEN 14 WHEN substr(cdrzjdm,13,1)='F' THEN 15 WHEN substr(cdrzjdm,13,1)='G' THEN 16 WHEN substr(cdrzjdm,13,1)='H' THEN 17 WHEN substr(cdrzjdm,13,1)='J' THEN 18 WHEN substr(cdrzjdm,13,1)='K' THEN 19 WHEN substr(cdrzjdm,13,1)='L' THEN 20 WHEN substr(cdrzjdm,13,1)='M' THEN 21 WHEN substr(cdrzjdm,13,1)='N' THEN 22 WHEN substr(cdrzjdm,13,1)='P' THEN 23 WHEN substr(cdrzjdm,13,1)='Q' THEN 24 WHEN substr(cdrzjdm,13,1)='R' THEN 25 WHEN substr(cdrzjdm,13,1)='T' THEN 26 WHEN substr(cdrzjdm,13,1)='U' THEN 27 WHEN substr(cdrzjdm,13,1)='W' THEN 28 WHEN substr(cdrzjdm,13,1)='X' THEN 29 WHEN substr(cdrzjdm,13,1)='Y' THEN 30 ELSE to_number(substr(cdrzjdm,13,1)) END )*8 +(CASE WHEN substr(cdrzjdm,14,1)='A' THEN 10 WHEN substr(cdrzjdm,14,1)='B' THEN 11 WHEN substr(cdrzjdm,14,1)='C' THEN 12 WHEN substr(cdrzjdm,14,1)='D' THEN 13 WHEN substr(cdrzjdm,14,1)='E' THEN 14 WHEN substr(cdrzjdm,14,1)='F' THEN 15 WHEN substr(cdrzjdm,14,1)='G' THEN 16 WHEN substr(cdrzjdm,14,1)='H' THEN 17 WHEN substr(cdrzjdm,14,1)='J' THEN 18 WHEN substr(cdrzjdm,14,1)='K' THEN 19 WHEN substr(cdrzjdm,14,1)='L' THEN 20 WHEN substr(cdrzjdm,14,1)='M' THEN 21 WHEN substr(cdrzjdm,14,1)='N' THEN 22 WHEN substr(cdrzjdm,14,1)='P' THEN 23 WHEN substr(cdrzjdm,14,1)='Q' THEN 24 WHEN substr(cdrzjdm,14,1)='R' THEN 25 WHEN substr(cdrzjdm,14,1)='T' THEN 26 WHEN substr(cdrzjdm,14,1)='U' THEN 27 WHEN substr(cdrzjdm,14,1)='W' THEN 28 WHEN substr(cdrzjdm,14,1)='X' THEN 29 WHEN substr(cdrzjdm,14,1)='Y' THEN 30 ELSE to_number(substr(cdrzjdm,14,1)) END )*24 +(CASE WHEN substr(cdrzjdm,15,1)='A' THEN 10 WHEN substr(cdrzjdm,15,1)='B' THEN 11 WHEN substr(cdrzjdm,15,1)='C' THEN 12 WHEN substr(cdrzjdm,15,1)='D' THEN 13 WHEN substr(cdrzjdm,15,1)='E' THEN 14 WHEN substr(cdrzjdm,15,1)='F' THEN 15 WHEN substr(cdrzjdm,15,1)='G' THEN 16 WHEN substr(cdrzjdm,15,1)='H' THEN 17 WHEN substr(cdrzjdm,15,1)='J' THEN 18 WHEN substr(cdrzjdm,15,1)='K' THEN 19 WHEN substr(cdrzjdm,15,1)='L' THEN 20 WHEN substr(cdrzjdm,15,1)='M' THEN 21 WHEN substr(cdrzjdm,15,1)='N' THEN 22 WHEN substr(cdrzjdm,15,1)='P' THEN 23 WHEN substr(cdrzjdm,15,1)='Q' THEN 24 WHEN substr(cdrzjdm,15,1)='R' THEN 25 WHEN substr(cdrzjdm,15,1)='T' THEN 26 WHEN substr(cdrzjdm,15,1)='U' THEN 27 WHEN substr(cdrzjdm,15,1)='W' THEN 28 WHEN substr(cdrzjdm,15,1)='X' THEN 29 WHEN substr(cdrzjdm,15,1)='Y' THEN 30 ELSE to_number(substr(cdrzjdm,15,1)) END )*10 +(CASE WHEN substr(cdrzjdm,16,1)='A' THEN 10 WHEN substr(cdrzjdm,16,1)='B' THEN 11 WHEN substr(cdrzjdm,16,1)='C' THEN 12 WHEN substr(cdrzjdm,16,1)='D' THEN 13 WHEN substr(cdrzjdm,16,1)='E' THEN 14 WHEN substr(cdrzjdm,16,1)='F' THEN 15 WHEN substr(cdrzjdm,16,1)='G' THEN 16 WHEN substr(cdrzjdm,16,1)='H' THEN 17 WHEN substr(cdrzjdm,16,1)='J' THEN 18 WHEN substr(cdrzjdm,16,1)='K' THEN 19 WHEN substr(cdrzjdm,16,1)='L' THEN 20 WHEN substr(cdrzjdm,16,1)='M' THEN 21 WHEN substr(cdrzjdm,16,1)='N' THEN 22 WHEN substr(cdrzjdm,16,1)='P' THEN 23 WHEN substr(cdrzjdm,16,1)='Q' THEN 24 WHEN substr(cdrzjdm,16,1)='R' THEN 25 WHEN substr(cdrzjdm,16,1)='T' THEN 26 WHEN substr(cdrzjdm,16,1)='U' THEN 27 WHEN substr(cdrzjdm,16,1)='W' THEN 28 WHEN substr(cdrzjdm,16,1)='X' THEN 29 WHEN substr(cdrzjdm,16,1)='Y' THEN 30 ELSE to_number(substr(cdrzjdm,16,1)) END )*30 +(CASE WHEN substr(cdrzjdm,17,1)='A' THEN 10 WHEN substr(cdrzjdm,17,1)='B' THEN 11 WHEN substr(cdrzjdm,17,1)='C' THEN 12 WHEN substr(cdrzjdm,17,1)='D' THEN 13 WHEN substr(cdrzjdm,17,1)='E' THEN 14 WHEN substr(cdrzjdm,17,1)='F' THEN 15 WHEN substr(cdrzjdm,17,1)='G' THEN 16 WHEN substr(cdrzjdm,17,1)='H' THEN 17 WHEN substr(cdrzjdm,17,1)='J' THEN 18 WHEN substr(cdrzjdm,17,1)='K' THEN 19 WHEN substr(cdrzjdm,17,1)='L' THEN 20 WHEN substr(cdrzjdm,17,1)='M' THEN 21 WHEN substr(cdrzjdm,17,1)='N' THEN 22 WHEN substr(cdrzjdm,17,1)='P' THEN 23 WHEN substr(cdrzjdm,17,1)='Q' THEN 24 WHEN substr(cdrzjdm,17,1)='R' THEN 25 WHEN substr(cdrzjdm,17,1)='T' THEN 26 WHEN substr(cdrzjdm,17,1)='U' THEN 27 WHEN substr(cdrzjdm,17,1)='W' THEN 28 WHEN substr(cdrzjdm,17,1)='X' THEN 29 WHEN substr(cdrzjdm,17,1)='Y' THEN 30 ELSE to_number(substr(cdrzjdm,17,1)) END)*28),31) <> (CASE WHEN substr(cdrzjdm,18,1)='A' THEN 10 WHEN substr(cdrzjdm,18,1)='B' THEN 11 WHEN substr(cdrzjdm,18,1)='C' THEN 12 WHEN substr(cdrzjdm,18,1)='D' THEN 13 WHEN substr(cdrzjdm,18,1)='E' THEN 14 WHEN substr(cdrzjdm,18,1)='F' THEN 15 WHEN substr(cdrzjdm,18,1)='G' THEN 16 WHEN substr(cdrzjdm,18,1)='H' THEN 17 WHEN substr(cdrzjdm,18,1)='J' THEN 18 WHEN substr(cdrzjdm,18,1)='K' THEN 19 WHEN substr(cdrzjdm,18,1)='L' THEN 20 WHEN substr(cdrzjdm,18,1)='M' THEN 21 WHEN substr(cdrzjdm,18,1)='N' THEN 22 WHEN substr(cdrzjdm,18,1)='P' THEN 23 WHEN substr(cdrzjdm,18,1)='Q' THEN 24 WHEN substr(cdrzjdm,18,1)='R' THEN 25 WHEN substr(cdrzjdm,18,1)='T' THEN 26 WHEN substr(cdrzjdm,18,1)='U' THEN 27 WHEN substr(cdrzjdm,18,1)='W' THEN 28 WHEN substr(cdrzjdm,18,1)='X' THEN 29 WHEN substr(cdrzjdm,18,1)='Y' THEN 30 WHEN substr(cdrzjdm,18,1)=0 THEN 31 ELSE to_number(substr(cdrzjdm,18,1)) END ) AND cdrzjlx='A01' AND LENGTH(cdrzjdm)=18;

优化后:

CREATE OR REPLACE FUNCTION bfd.FN_CHAR_TO_NUM( p_char IN CHAR -- 传入需要转换的单个字符 ) RETURN NUMBER IS BEGIN -- 统一转换为大写,避免大小写问题 CASE UPPER(p_char) WHEN 'A' THEN RETURN 10; WHEN 'B' THEN RETURN 11; WHEN 'C' THEN RETURN 12; WHEN 'D' THEN RETURN 13; WHEN 'E' THEN RETURN 14; WHEN 'F' THEN RETURN 15; WHEN 'G' THEN RETURN 16; WHEN 'H' THEN RETURN 17; WHEN 'J' THEN RETURN 18; WHEN 'K' THEN RETURN 19; WHEN 'L' THEN RETURN 20; WHEN 'M' THEN RETURN 21; WHEN 'N' THEN RETURN 22; WHEN 'P' THEN RETURN 23; WHEN 'Q' THEN RETURN 24; WHEN 'R' THEN RETURN 25; WHEN 'T' THEN RETURN 26; WHEN 'U' THEN RETURN 27; WHEN 'W' THEN RETURN 28; WHEN 'X' THEN RETURN 29; WHEN 'Y' THEN RETURN 30; -- 数字字符直接转换 ELSE RETURN TO_NUMBER(p_char); END CASE; EXCEPTION -- 处理非预期字符(如特殊符号、空值等) WHEN OTHERS THEN RETURN -1; END FN_CHAR_TO_NUM; / CREATE OR REPLACE FUNCTION bfd.FN_CHECK_TYSHXYDM( p_zjdm IN VARCHAR2 -- 传入需要校验的CDRZJDM字符串 ) RETURN NUMBER IS v_sum NUMBER := 0; -- 存储计算总和 v_mod NUMBER := 0; -- 存储取模结果 v_check_digit NUMBER := 0; -- 校验位数值 v_char CHAR(1); -- 临时存储单个字符 BEGIN -- 校验输入长度(必须是18位) IF LENGTH(p_zjdm) != 18 THEN RETURN 0; -- 长度不符,校验未通过 END IF; -- 计算前17位的加权和(调用独立的转换函数) v_sum := FN_CHAR_TO_NUM(SUBSTR(p_zjdm, 1, 1)) * 1 + FN_CHAR_TO_NUM(SUBSTR(p_zjdm, 2, 1)) * 3 + FN_CHAR_TO_NUM(SUBSTR(p_zjdm, 3, 1)) * 9 + FN_CHAR_TO_NUM(SUBSTR(p_zjdm, 4, 1)) * 27 + FN_CHAR_TO_NUM(SUBSTR(p_zjdm, 5, 1)) * 19 + FN_CHAR_TO_NUM(SUBSTR(p_zjdm, 6, 1)) * 26 + FN_CHAR_TO_NUM(SUBSTR(p_zjdm, 7, 1)) * 16 + FN_CHAR_TO_NUM(SUBSTR(p_zjdm, 8, 1)) * 17 + FN_CHAR_TO_NUM(SUBSTR(p_zjdm, 9, 1)) * 20 + FN_CHAR_TO_NUM(SUBSTR(p_zjdm, 10, 1)) * 29 + FN_CHAR_TO_NUM(SUBSTR(p_zjdm, 11, 1)) * 25 + FN_CHAR_TO_NUM(SUBSTR(p_zjdm, 12, 1)) * 13 + FN_CHAR_TO_NUM(SUBSTR(p_zjdm, 13, 1)) * 8 + FN_CHAR_TO_NUM(SUBSTR(p_zjdm, 14, 1)) * 24 + FN_CHAR_TO_NUM(SUBSTR(p_zjdm, 15, 1)) * 10 + FN_CHAR_TO_NUM(SUBSTR(p_zjdm, 16, 1)) * 30 + FN_CHAR_TO_NUM(SUBSTR(p_zjdm, 17, 1)) * 28; -- 计算取模结果 v_mod := MOD(v_sum, 31); -- 获取第18位校验位的数值(0特殊处理为31) v_char := SUBSTR(p_zjdm, 18, 1); IF v_char = '0' THEN v_check_digit := 31; ELSE v_check_digit := FN_CHAR_TO_NUM(v_char); END IF; -- 校验逻辑:31 - 模值 不等于 校验位数值 则未通过 IF (31 - v_mod) != v_check_digit THEN RETURN 0; -- 校验未通过 ELSE RETURN 1; -- 校验通过 END IF; EXCEPTION WHEN OTHERS THEN RETURN 0; -- 任何异常都视为校验未通过 END FN_CHECK_TYSHXYDM;

SQL调用验证:

SELECT * FROM BFD.BFD_PJRZFS WHERE DATA_DT = '2026-02-28' AND cdrzjlx = 'A01' AND LENGTH(cdrzjdm) = 18 AND BFD.FN_CHECK_TYSHXYDM(CDRZJDM) = 0; -- 0表示校验未通过;-- 不通过43条 SELECT * FROM BFD.BFD_PJRZFS WHERE DATA_DT = '2026-03-31' AND cdrzjlx = 'A01' AND LENGTH(cdrzjdm) = 18 AND BFD.FN_CHECK_TYSHXYDM(CDRZJDM) = 0;
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/22 2:29:50

Carrot:破解Codeforces实时评分预测难题的浏览器扩展

Carrot&#xff1a;破解Codeforces实时评分预测难题的浏览器扩展 【免费下载链接】carrot A browser extension for Codeforces rating prediction 项目地址: https://gitcode.com/gh_mirrors/carrot1/carrot 在Codeforces竞赛中&#xff0c;每一位参赛者都面临着实时了…

作者头像 李华
网站建设 2026/5/23 13:12:01

FLUX.1-dev-fp8-dit文生图智能助手:SDXL Prompt风格赋能内容创作提效实战

FLUX.1-dev-fp8-dit文生图智能助手&#xff1a;SDXL Prompt风格赋能内容创作提效实战 1. 为什么你需要这个文生图助手 你是不是也遇到过这些情况&#xff1a; 想快速出一张电商主图&#xff0c;但反复改提示词十几次&#xff0c;生成的图不是构图歪斜&#xff0c;就是细节糊…

作者头像 李华
网站建设 2026/5/28 13:23:43

yz-bijini-cosplay实测:如何快速制作专业Cosplay作品集

yz-bijini-cosplay实测&#xff1a;如何快速制作专业Cosplay作品集 你是不是也遇到过这些问题&#xff1a; 想为新角色攒一套高质量作品集&#xff0c;但找画师周期长、成本高&#xff1b;自己拍写真又受限于场地、服装、灯光和后期修图能力&#xff1b;用普通AI绘图工具生成的…

作者头像 李华
网站建设 2026/5/27 9:20:16

3步完成!Qwen3-VL大模型与飞书的高效对接方案

3步完成&#xff01;Qwen3-VL大模型与飞书的高效对接方案 引言 你是否遇到过这样的场景&#xff1a;团队刚部署好一个强大的多模态大模型&#xff0c;却卡在最后一步——怎么让它真正用起来&#xff1f;不是跑在命令行里看日志&#xff0c;而是走进每天都在用的办公软件&…

作者头像 李华
网站建设 2026/5/24 9:35:58

Qwen3-Embedding-0.6B功能测评:小参数也有高性能

Qwen3-Embedding-0.6B功能测评&#xff1a;小参数也有高性能 在向量检索、RAG构建和语义搜索的实际工程中&#xff0c;我们常陷入一个两难选择&#xff1a;大模型效果好但部署成本高、响应慢&#xff1b;小模型轻快却怕性能打折扣。Qwen3-Embedding-0.6B的出现&#xff0c;正是…

作者头像 李华