news 2026/4/16 17:23:43

金融基础数据——统一社会信用代码校验规则(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/4/16 12:16:05

电商海报秒出稿!Z-Image-Turbo实战应用分享

电商海报秒出稿&#xff01;Z-Image-Turbo实战应用分享 在电商运营节奏越来越快的今天&#xff0c;一张高质量主图往往决定点击率的生死线。新品上架要配图、节日大促要氛围图、直播预告要吸睛图……设计师排期爆满&#xff0c;外包反复返工&#xff0c;临时改稿手忙脚乱——而…

作者头像 李华
网站建设 2026/4/16 12:21:03

内容访问工具技术解析:浏览器扩展实现与应用指南

内容访问工具技术解析&#xff1a;浏览器扩展实现与应用指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在当今数字化信息环境中&#xff0c;内容访问工具作为一种浏览器扩展技术…

作者头像 李华
网站建设 2026/4/16 14:29:49

无需GPU集群!单卡RTX3090即可运行的编程助手来了

无需GPU集群&#xff01;单卡RTX3090即可运行的编程助手来了 当同行还在为部署7B模型而调配双卡A10&#xff0c;为跑通13B模型而申请GPU资源池时&#xff0c;一个仅15亿参数的开源模型悄然在本地RTX 3090上完成了首次完整推理——没有集群&#xff0c;没有K8s编排&#xff0c;…

作者头像 李华
网站建设 2026/4/16 14:03:14

IndexTTS 2.0在企业配音中的实际应用,效率翻倍

IndexTTS 2.0在企业配音中的实际应用&#xff0c;效率翻倍 企业级内容生产正面临一场静默却深刻的变革&#xff1a;营销视频日均产出量增长300%&#xff0c;但专业配音人力增长不足5%&#xff1b;一支15人新媒体团队&#xff0c;每月需完成200条短视频配音&#xff0c;其中76%…

作者头像 李华
网站建设 2026/4/16 16:12:40

让你的电脑重获新生:Windows Cleaner轻松解决C盘空间不足问题

让你的电脑重获新生&#xff1a;Windows Cleaner轻松解决C盘空间不足问题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否也曾遇到过这样的情况&#xff1a…

作者头像 李华
网站建设 2026/4/16 10:36:04

DeerFlow运维监控:通过llm.log查看模型服务状态

DeerFlow运维监控&#xff1a;通过llm.log查看模型服务状态 1. DeerFlow是什么&#xff1a;你的个人深度研究助理 DeerFlow不是一款普通的大模型应用&#xff0c;而是一个能真正帮你“做研究”的智能系统。它不满足于简单问答&#xff0c;而是像一位经验丰富的研究员伙伴&…

作者头像 李华