Delphi5实现身份证检验(DLL版)
效果图

身份证行政区划分代码

识别归属地需要行政区划分,都在data.txt文档里面了。

最后一位校验码
根据上面的原理编写程序即可。
{这个函数计算最后一位检验码是否正确,ID是18位身份证号字符串,结果返回字符串}
function IDcheck(ID:string):string;
const//权重W:array[1..17] of Integer = (7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);//最后一位校验码A:array[0..10] of Char = ('1','0','x','9','8','7','6','5','4','3','2');
varnewID:string;j,i,S:Integer;
beginnewID:=ID;S:=0;for i:=1 to 17 dobegin//求加权因子的乘积。j:=strtoint(newID[i])*W[i];//求和S:=S+j;end;//求模S:=S mod 11;//查表Result:=A[S];
end;
识别出生日期
传入的身份证号就有出生日期,直接截取相应字符串就好。有趣的是,使用到了参数传递,直接修改变量的值。
{年月日这三个是通过 var 关键字传递的变量,
意味着它们在函数内部被修改后,其变化会反映到调用函数时的变量上。}
function IDcard(IDNo:string;var year,month,day:Integer):Boolean;stdcall;
beginif Length(IDNo)<>18 thenbeginyear:=-1;Result:=False;end//判断最后一位检验码是否正确else if IDcheck(IDNo)=Copy(IDNo,18,1) thenbegin//将年月日截取出来year:=StrToInt(Copy(IDNo,7,4));month:=StrToInt(Copy(IDNo,11,2));day:=StrToInt(Copy(IDNo,13,2));Result:=True;endelseResult:=False;
end;
识别性别
原理同上表,偶数为女生,奇数为男生。
{检查性别}
function sexcheck(IDNo:string):string;stdcall;
varstr:string;
beginstr:=Copy(IDNo,17,1);if StrToInt(str) mod 2 =1 thenResult:='男'elseResult:='女';
end;
识别归属地
需要查data.txt,这个文件已经上传到CSDN了,上面有链接,可以自取。
{判断归属地}
function Addcheck(IDNo:string):string;stdcall;
varF1:TextFile;str_temp,str1,str2,str3,str4:string;begin//AssignFile 函数是用于将文件变量与磁盘上的文件关联起来的。//这是进行文件操作(如读写文件)的第一步。AssignFile(F1,'data.txt');Reset(F1); // 尝试以读取模式打开文件tryReadln(F1,str1); //将F1的内容第一行读到str1while not Eof(F1) do // 检查文件是否成功打开beginstr_temp:=str1;str1:=Copy(str1,1,6); //截取前六位行政区号//截取前两位判断省份if str1=Copy(IDNo,1,2)+'0000' thenbeginstr2:=Trim(Copy(str_temp,7,40));end;//判断市if str1=Copy(IDNo,1,4)+'00' thenbeginstr3:=Trim(Copy(str_temp,7,40));end;//判断县if str1=Copy(IDNo,1,6) thenbeginstr4:=Trim(Copy(str_temp,7,40));result:=str2+str3+str4;Exit;end;Readln(F1,str1);end; Result:='输入不合法,请重新输入!';finallyCloseFile(F1);end;
end;
完整DLL文件
library Project1;
{这是动态链接库了}{ Important note about DLL memory management: ShareMem must be thefirst unit in your library's USES clause AND your project's (selectProject-View Source) USES clause if your DLL exports any procedures orfunctions that pass strings as parameters or function results. Thisapplies to all strings passed to and from your DLL--even those thatare nested in records and classes. ShareMem is the interface unit tothe BORLNDMM.DLL shared memory manager, which must be deployed alongwith your DLL. To avoid using BORLNDMM.DLL, pass string informationusing PChar or ShortString parameters. }usesSysUtils,Classes,Windows,Controls,Messages,Dialogs;{$R *.RES}{第一步:编写DLL文件的函数,加上stdcall,表明函数被外部调用}{这个函数计算最后一位检验码是否正确,ID是18位身份证号字符串,结果返回字符串}
function IDcheck(ID:string):string;
const//权重W:array[1..17] of Integer = (7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);//最后一位校验码A:array[0..10] of Char = ('1','0','x','9','8','7','6','5','4','3','2');
varnewID:string;j,i,S:Integer;
beginnewID:=ID;S:=0;for i:=1 to 17 dobegin//求加权因子的乘积。j:=strtoint(newID[i])*W[i];//求和S:=S+j;end;//求模S:=S mod 11;//查表Result:=A[S];
end;{年月日这三个是通过 var 关键字传递的变量,
意味着它们在函数内部被修改后,其变化会反映到调用函数时的变量上。}
function IDcard(IDNo:string;var year,month,day:Integer):Boolean;stdcall;
beginif Length(IDNo)<>18 thenbeginyear:=-1;Result:=False;end//判断最后一位检验码是否正确else if IDcheck(IDNo)=Copy(IDNo,18,1) thenbegin//将年月日截取出来year:=StrToInt(Copy(IDNo,7,4));month:=StrToInt(Copy(IDNo,11,2));day:=StrToInt(Copy(IDNo,13,2));Result:=True;endelseResult:=False;
end;{检查性别}
function sexcheck(IDNo:string):string;stdcall;
varstr:string;
beginstr:=Copy(IDNo,17,1);if StrToInt(str) mod 2 =1 thenResult:='男'elseResult:='女';
end;{判断归属地}
function Addcheck(IDNo:string):string;stdcall;
varF1:TextFile;str_temp,str1,str2,str3,str4:string;begin//AssignFile 函数是用于将文件变量与磁盘上的文件关联起来的。//这是进行文件操作(如读写文件)的第一步。AssignFile(F1,'data.txt');Reset(F1); // 尝试以读取模式打开文件tryReadln(F1,str1); //将F1的内容第一行读到str1while not Eof(F1) do // 检查文件是否成功打开beginstr_temp:=str1;str1:=Copy(str1,1,6); //截取前六位行政区号//截取前两位判断省份if str1=Copy(IDNo,1,2)+'0000' thenbeginstr2:=Trim(Copy(str_temp,7,40));end;//判断市if str1=Copy(IDNo,1,4)+'00' thenbeginstr3:=Trim(Copy(str_temp,7,40));end;//判断县if str1=Copy(IDNo,1,6) thenbeginstr4:=Trim(Copy(str_temp,7,40));result:=str2+str3+str4;Exit;end;Readln(F1,str1);end;Result:='输入不合法,请重新输入!';finallyCloseFile(F1);end;
end;{第二步:导出函数}
exportsIDcard,sexcheck,Addcheck;begin
end.
完整代码
放在CSDN了,可以自取。

相关文章:
Delphi5实现身份证检验(DLL版)
效果图 身份证行政区划分代码 识别归属地需要行政区划分,都在data.txt文档里面了。 最后一位校验码 根据上面的原理编写程序即可。 {这个函数计算最后一位检验码是否正确,ID是18位身份证号字符串,结果返回字符串} function IDcheck(ID:stri…...
linux下的C++程序
1.安装g编译环境(c)、gcc编译环境(c语言) sudo yum install gcc或者gcc-c //安装gcc/g编译(用管理员权限弄) 验证是否安装成功 gcc或者g --version //如果显示版本号,则表示安装成功 sudo yum remove g…...
selfAttention 中的dk到底是什么
在Self-Attention机制中,为什么需要对 Q K T QK^T QKT 的结果进行缩放,除以 d k \sqrt{d_k} dk 。以下是详细解释: 缩放的原因 除以 d k \sqrt{d_k} dk 的原因有两个: 防止输入过大:如果不缩放…...
安装MongoDB UI客户端工具:mongodb-compass-1.40.2-win32-x64.msi
文章目录 1、安装 mongodb-compass-1.40.2-win32-x64.msi2、安装后配置链接地址: 1、安装 mongodb-compass-1.40.2-win32-x64.msi 2、安装后配置链接地址:...
一行命令搞定内网穿透
一行命令搞定内网穿透 一款开源免费的内网穿透工具:localtunnel ,基于 nodejs 实现,无需修改 DNS 和防火墙设置,方便快捷的将内网服务暴露到外网,为开发人员、测试人员以及需要分享本地项目的人提供实时的公网访问方式…...
C语言——扫雷游戏
扫雷游戏通常是一个由方格组成的区域内进行的,其中随机分布着一定数量的地雷 。玩家的目标是通过点击方格来标记出所有地雷的位置,同时避免自己点到地雷而导致游戏失败。游戏开始时,玩家通常只能看到一部分方格,而其余的方格则需要…...
【LLM】-16-评估LLM-与标准答案的差距
目录 1、评估回答是否正确 1.1、util_zh 1.2、eval_zh 1.3、评估 2、评估生成答案与标准答案的差距 2.1、eval_zh2 2.2、评估 即使没有提供的理想答案,只要能制定一个评估标准,就可以使用一个 LLM 来评估另一个 LLM 的输出。 如果可以提供理想答…...
WeNet 2.0:更高效的端到端语音识别工具包
WeNet 2.0:更高效的端到端语音识别工具包 原文链接:[2203.15455] WeNet 2.0: More Productive End-to-End Speech Recognition Toolkit (arxiv.org) 1.摘要 WeNet是一个开源的端到端语音识别工具包,WeNet 2.0在此基础上进行了四项主要更新,…...
阿里大模型调用 = 》通义千问大语言模型
背景:简单的通过API或者SDK在线调用阿里云大模型(基于百炼平台),基于在线知识库 参考地址:安装阿里云百炼SDK_大模型服务平台百炼(Model Studio)-阿里云帮助中心 (aliyun.com) 1、获取API-KEY 当您通过API/SDK调用大模…...
idea使用free流程,2024idea免费使用
1.先到官网下载,这里选择win系统的,点击下图的.exe https://www.jetbrains.com/idea/download/?sectionwindows 2.下载好后基本上就是一直点击“下一步”到直到安装好,安装好后先打开软件后关闭退出 3.下载配配套资料 链接: https://pan.ba…...
算法_链表专题---持续更新
文章目录 前言两数相加题目要求题目解析代码如下 两两交换链表中的结点题目要求题目解析代码如下 重排链表题目要求题目解析代码如下 合并K个升序链表题目要求题目解析 K个一组翻转链表题目要求题目解析代码如下 前言 本文将记录leetcode链表算法题解,包含题目有&a…...
在Windows MFC\C++编程中,如何使用OnCopyData函数
在C中,OnCopyData 函数通常不是标准C库的一部分,而是与特定的图形用户界面(GUI)框架相关联,如Microsoft Foundation Classes (MFC) 或 Windows API 编程。在MFC应用程序中,OnCopyData 是用于处理来自其他应…...
【Qt】项目代码
main.cpp文件 argc:命令行参数个数。*argv[ ]:每一个命令行参数的内容。main的形参就是命令行参数。QApplication a(argc, argv) 编写一个Qt的图形化界面程序,一定需要QApplication对象。 widget w; 在创建项目的时候,勾选widg…...
MySQL中常用工具
MySQL自带的系统数据库 常用工具 MySQL mysqladmin mysqlbinlog mysqldump mysqlimport/source mysqlimport只能导入文本文件,不能导入sql文件...
关于儿童编程语言
青少年通常会通过Scratch或Python开始学习编程。在这两种语言中,代码的编写(或者在Scratch中是构建)方式类似于英语,这使得初学者更容易学习。Scratch的一个重要卖点是对视觉和运动感知学习者非常友好。这些代码块按颜色编码&…...
[io]进程间通信 -信号函数 —信号处理过程
sighandler_t signal(int signum, sighandler_t handler); 功能: 信号处理函数 参数: signum:要处理的信号 handler:信号处理方式 SIG_IGN:忽略信号 SIG_DFL:执行默认操作 handler:捕捉信 …...
RoboDK的插件
目录 collision-free-planner: opc-ua: collision-free-planner: RoboDK 的无碰撞规划器插件使用概率路线图 (PRM) 自动在机器人工作空间内创建无碰撞路径。 有关无碰撞规划器的更多信息,请访问我们的 文档。 生成参数无碰撞…...
List<HashMap<String, Object>>排序
如果列表中的元素类型是List<HashMap<String, Object>>,排序时需要考虑到value可能是任意类型的对象。在这种情况下,你可以针对具体的类型进行比较,或者使用Comparable接口来确保对象可以被正确比较。 示例代码 假设我们想要根据…...
【大数据】探索大数据基础知识:定义、特征与生态系统
欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题.…...
营销材料翻译质量对销售渠道的影响
在当今的全球市场中,与不同受众进行有效沟通的能力对于企业的成功至关重要。营销材料的高质量翻译在通过销售渠道塑造客户旅程方面发挥着重要作用,影响着知名度、参与度、转化率和保留率。方法如下: 提高品牌知名度 在销售渠道的顶端&#x…...
小程序常用页面跳转 5 种方式汇总(开发常备手册)
小程序多页面协作离不开路由跳转,不同场景对应不同跳转 API,今天一次性整理齐全,开发随时查阅。保留当前页跳转(普通内页)wx.navigateTo({url:"/pages/detail/detail"})关闭当前页再跳转wx.redirectTo({url:…...
从“数字员工”到“可控系统”:Agent 治理框架与审批流程
从“数字员工”到“可控系统”:Agent 治理框架与审批流程深度解析 摘要/引言 开门见山 你有没有在最近的科技峰会、企业新闻或者 GitHub 热榜里,听到过「Agent 接管 80% 重复性编程工作」「金融客服 Agent 日处理量破百万件」这类令人振奋又隐隐不安的消息?上周我和某银行…...
Android 8.0长时定时关机总延迟?我换了种思路,用系统广播ACTION_TIME_TICK轻松搞定
Android定时任务稳定性优化:从AlarmManager到系统广播的实践之路 在智能硬件和特定应用场景中,定时功能的可靠性往往直接影响用户体验。想象一下,你为孩子设置的学习软件定时关闭功能延迟了几分钟,或者智能家居设备的自动关机未能…...
从零开始:手把手教你用UML绘制状态图(附实战案例)
从零开始:手把手教你用UML绘制状态图(附实战案例) 在软件开发的世界里,UML(统一建模语言)就像工程师的通用语言,而状态图则是其中最强大的工具之一。想象一下,当你需要清晰地描述一个…...
嵌入式裸机开发中的轻量级上下文切换方案
1. 嵌入式编程中的上下文切换挑战在裸机嵌入式开发中,中断服务程序(ISR)的设计一直是个棘手的问题。传统教科书告诉我们:中断处理必须快进快出,绝对不能执行耗时操作。但在实际项目中,我们经常遇到这样的困境——某个传感器触发中…...
基于QT(C++)实现(界面)实现的五子棋游戏
Qt小游戏开发:五子棋(带AI功能) 写了一个带AI的五子棋小游戏,AI的表现还可以~ 1.预览 2.步骤 整体的代码结构,一个游戏逻辑类,一个UI类 2.1定义游戏数据结构 // 游戏类型,双人还是AI&#x…...
直播录制从未如此简单:StreamCap 40+平台自动录制全攻略
直播录制从未如此简单:StreamCap 40平台自动录制全攻略 【免费下载链接】StreamCap Multi-Platform Live Stream Automatic Recording Tool | 多平台直播流自动录制客户端 基于FFmpeg 支持监控/定时/转码 项目地址: https://gitcode.com/gh_mirrors/st/StreamCa…...
为什么说Rust是对自闭症谱系人士友好的编程语言?
程序员圈子里,Rust常常以学习路线陡峭而闻名。就我自己的个人理解来说,之所以说它“学习路线陡峭”,很大程度上都来源于以下三点:Rust有很多语法糖,而且官方把这些语法糖给设置成了默认的最佳实现的语法,还…...
免费方法和付费工具处理顽固AI率,差距有多大
顽固AI率,有没有必要付费? 这个问题的答案,取决于你有多少时间,以及你能接受多少不确定性。这篇文章用数据说话。 免费方法:自己改写 方法:自己逐段阅读,换词改句,加口语化表达 …...
Unity游戏翻译革命:XUnity.AutoTranslator完全指南
Unity游戏翻译革命:XUnity.AutoTranslator完全指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾因为语言障碍而错过优秀的日本Unity游戏?是否厌倦了等待官方汉化却遥遥…...
