news 2026/7/2 5:51:34

金融基础数据——统一社会信用代码校验规则(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/6/29 21:27:41

数字内容解锁技术全解析:信息获取工具的工作原理与实践指南

数字内容解锁技术全解析&#xff1a;信息获取工具的工作原理与实践指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息爆炸的时代&#xff0c;优质内容往往被付费墙所阻隔。本…

作者头像 李华
网站建设 2026/6/26 10:56:23

Nano-Banana Studio开源镜像教程:离线模型加载+本地化加速配置

Nano-Banana Studio开源镜像教程&#xff1a;离线模型加载本地化加速配置 1. 为什么你需要这个工具&#xff1a;从“看不清”到“全拆开”的设计革命 你有没有遇到过这样的场景&#xff1f; 设计师在做服装新品展示时&#xff0c;反复调整布料褶皱和缝线位置&#xff0c;只为…

作者头像 李华
网站建设 2026/6/25 12:27:07

VibeVoice技术架构深度解析:前端WebUI与后端服务通信机制

VibeVoice技术架构深度解析&#xff1a;前端WebUI与后端服务通信机制 1. 系统概览&#xff1a;一个轻量但高效的实时语音合成方案 VibeVoice 不是一个概念验证玩具&#xff0c;而是一套真正能跑在消费级显卡上的实时语音合成系统。它基于微软开源的 VibeVoice-Realtime-0.5B …

作者头像 李华
网站建设 2026/6/26 13:25:58

电商创业必备!EcomGPT-7B实战:从评论分析到智能推荐

电商创业必备&#xff01;EcomGPT-7B实战&#xff1a;从评论分析到智能推荐 1. 为什么电商创业者需要专属大模型&#xff1f; 你是不是也经历过这些场景&#xff1a; 每天收到上百条商品评论&#xff0c;却没人手逐条看懂用户到底在抱怨什么、喜欢什么&#xff1b;新上架一款…

作者头像 李华
网站建设 2026/6/28 23:41:16

Clawdbot+Qwen3-32B快速上手:企业级Chat平台搭建

ClawdbotQwen3-32B快速上手&#xff1a;企业级Chat平台搭建 1. 为什么你需要这个平台——不是又一个Demo&#xff0c;而是能立刻用起来的内部AI助手 你有没有遇到过这些情况&#xff1f; 市面上的SaaS聊天工具无法接入内网知识库&#xff0c;敏感数据不敢上公有云&#xff1…

作者头像 李华
网站建设 2026/6/30 2:14:53

Face3D.ai Pro商业应用:电商虚拟试妆系统3D人脸底模构建

Face3D.ai Pro商业应用&#xff1a;电商虚拟试妆系统3D人脸底模构建 1. 为什么电商急需自己的3D人脸底模&#xff1f; 你有没有注意过&#xff0c;现在打开淘宝、京东或者小红书&#xff0c;点进一支口红或一款粉底液的详情页&#xff0c;页面上总会出现“AI试色”“虚拟上脸…

作者头像 李华