news 2026/2/27 5:59:54

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

作者头像

张小明

前端开发工程师

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

原函数:

SELECT * FROM bfd.BFD_PJRZFS WHERE DATA_DT='2025-12-31' AND 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;

优化后转变为适配mysql的:

use bfd; -- 创建字符转数字的辅助函数(可选,用于简化主函数) DELIMITER // drop FUNCTION bfd.char_to_num; CREATE FUNCTION bfd.char_to_num(c CHAR(1)) RETURNS INT DETERMINISTIC BEGIN DECLARE num INT; SET num = CASE WHEN c = 'A' THEN 10 WHEN c = 'B' THEN 11 WHEN c = 'C' THEN 12 WHEN c = 'D' THEN 13 WHEN c = 'E' THEN 14 WHEN c = 'F' THEN 15 WHEN c = 'G' THEN 16 WHEN c = 'H' THEN 17 WHEN c = 'J' THEN 18 WHEN c = 'K' THEN 19 WHEN c = 'L' THEN 20 WHEN c = 'M' THEN 21 WHEN c = 'N' THEN 22 WHEN c = 'P' THEN 23 WHEN c = 'Q' THEN 24 WHEN c = 'R' THEN 25 WHEN c = 'T' THEN 26 WHEN c = 'U' THEN 27 WHEN c = 'W' THEN 28 WHEN c = 'X' THEN 29 WHEN c = 'Y' THEN 30 ELSE CAST(c AS UNSIGNED) END; RETURN num; END // -- 主校验函数 drop FUNCTION bfd.validate_tyshxydm; CREATE FUNCTION bfd.validate_tyshxydm(zjdm VARCHAR(18)) RETURNS BOOLEAN DETERMINISTIC BEGIN DECLARE sum_val INT DEFAULT 0; DECLARE check_bit INT; DECLARE calc_check_bit INT; -- 校验参数长度 IF LENGTH(zjdm) != 18 THEN RETURN FALSE; END IF; -- 计算前17位的加权和 SET sum_val = char_to_num(SUBSTRING(zjdm, 1, 1)) * 1 + char_to_num(SUBSTRING(zjdm, 2, 1)) * 3 + char_to_num(SUBSTRING(zjdm, 3, 1)) * 9 + char_to_num(SUBSTRING(zjdm, 4, 1)) * 27 + char_to_num(SUBSTRING(zjdm, 5, 1)) * 19 + char_to_num(SUBSTRING(zjdm, 6, 1)) * 26 + char_to_num(SUBSTRING(zjdm, 7, 1)) * 16 + char_to_num(SUBSTRING(zjdm, 8, 1)) * 17 + char_to_num(SUBSTRING(zjdm, 9, 1)) * 20 + char_to_num(SUBSTRING(zjdm, 10, 1)) * 29 + char_to_num(SUBSTRING(zjdm, 11, 1)) * 25 + char_to_num(SUBSTRING(zjdm, 12, 1)) * 13 + char_to_num(SUBSTRING(zjdm, 13, 1)) * 8 + char_to_num(SUBSTRING(zjdm, 14, 1)) * 24 + char_to_num(SUBSTRING(zjdm, 15, 1)) * 10 + char_to_num(SUBSTRING(zjdm, 16, 1)) * 30 + char_to_num(SUBSTRING(zjdm, 17, 1)) * 28; -- 计算校验位 SET calc_check_bit = 31 - MOD(sum_val, 31); -- 处理0的特殊情况(0对应31) IF calc_check_bit = 31 THEN SET calc_check_bit = 0; END IF; -- 获取实际的第18位校验位 SET check_bit = char_to_num(SUBSTRING(zjdm, 18, 1)); -- 处理0的特殊情况(0对应31) IF check_bit = 31 THEN SET check_bit = 0; END IF; -- 返回校验结果 RETURN (calc_check_bit = check_bit); END // DELIMITER ;

调用:

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

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

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

作者头像 李华
网站建设 2026/2/21 22:20:01

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

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

作者头像 李华
网站建设 2026/2/25 15:17:34

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

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

作者头像 李华
网站建设 2026/2/26 17:56:41

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

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

作者头像 李华
网站建设 2026/2/24 22:16:50

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

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

作者头像 李华
网站建设 2026/2/21 20:42:04

革命性数字工具使用技巧:颠覆认知的多设备协同方案

革命性数字工具使用技巧&#xff1a;颠覆认知的多设备协同方案 【免费下载链接】WeChatPad 强制使用微信平板模式 项目地址: https://gitcode.com/gh_mirrors/we/WeChatPad 你是否曾遇到这样的困境&#xff1a;重要工作消息在手机上弹出时&#xff0c;你正在电脑前专注处…

作者头像 李华