news 2026/6/9 20:14:03

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

Qwen3-Reranker-4B保姆级教学:Gradio界面中支持拖拽上传PDF重排序

Qwen3-Reranker-4B保姆级教学&#xff1a;Gradio界面中支持拖拽上传PDF重排序 1. 为什么你需要Qwen3-Reranker-4B 你有没有遇到过这样的问题&#xff1a;从一堆PDF文档里找关键信息&#xff0c;靠关键词搜索返回几十页结果&#xff0c;但真正有用的内容却藏在第17页的脚注里&…

作者头像 李华
网站建设 2026/6/7 22:02:55

万物识别-中文镜像实际项目:社区垃圾分类图像识别与投放指导系统

万物识别-中文镜像实际项目&#xff1a;社区垃圾分类图像识别与投放指导系统 你有没有在小区垃圾桶前犹豫过——手里的奶茶杯该扔进哪个桶&#xff1f;用过的纸巾算干垃圾还是其他垃圾&#xff1f;塑料袋到底能不能回收&#xff1f;这不是你一个人的困惑。全国超300个地级市已…

作者头像 李华
网站建设 2026/6/5 16:13:36

阿里SiameseUIE信息抽取模型:无需标注数据的开箱即用指南

阿里SiameseUIE信息抽取模型&#xff1a;无需标注数据的开箱即用指南 你是否还在为信息抽取任务发愁&#xff1f;要标注几百条训练数据、反复调试模型参数、部署时卡在环境配置上……这些痛点&#xff0c;SiameseUIE一句话就解决了&#xff1a;不用标数据&#xff0c;不写代码…

作者头像 李华
网站建设 2026/6/7 12:51:17

Qwen3-Embedding-4B案例分享:打造企业级智能知识库

Qwen3-Embedding-4B案例分享&#xff1a;打造企业级智能知识库 1. 为什么传统搜索在企业知识库中频频失效&#xff1f; 你有没有遇到过这些场景&#xff1a; 新员工在内部Wiki里搜“报销流程”&#xff0c;却只看到标题含“费用”“审批”的文档&#xff0c;真正讲步骤的那篇…

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

AI上色神器DDColor:让黑白照片瞬间变彩色的秘密

AI上色神器DDColor&#xff1a;让黑白照片瞬间变彩色的秘密 你有没有翻过家里的老相册&#xff1f;泛黄纸页间&#xff0c;祖辈站在老屋门前微笑&#xff0c;军装笔挺&#xff0c;背景是青砖灰瓦——可那笑容是黑白的&#xff0c;天空是灰的&#xff0c;连衣襟上的褶皱都失去了…

作者头像 李华
网站建设 2026/6/5 19:53:34

效果惊艳!用科哥版Paraformer生成会议纪要全过程

效果惊艳&#xff01;用科哥版Paraformer生成会议纪要全过程 语音识别这件事&#xff0c;以前总觉得离普通人很远——得配专业设备、得调复杂参数、得等半天出结果。直到我试了科哥打包的这个Speech Seaco Paraformer ASR镜像&#xff0c;才真正体会到什么叫“开箱即用”。上周…

作者头像 李华