当前位置: 首页 > news >正文

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版)

效果图 身份证行政区划分代码 识别归属地需要行政区划分&#xff0c;都在data.txt文档里面了。 最后一位校验码 根据上面的原理编写程序即可。 {这个函数计算最后一位检验码是否正确&#xff0c;ID是18位身份证号字符串&#xff0c;结果返回字符串} function IDcheck(ID:stri…...

linux下的C++程序

1.安装g编译环境&#xff08;c&#xff09;、gcc编译环境&#xff08;c语言&#xff09; sudo yum install gcc或者gcc-c //安装gcc/g编译(用管理员权限弄&#xff09; 验证是否安装成功 gcc或者g --version //如果显示版本号&#xff0c;则表示安装成功 sudo yum remove g…...

selfAttention 中的dk到底是什么

在Self-Attention机制中&#xff0c;为什么需要对 Q K T QK^T QKT 的结果进行缩放&#xff0c;除以 d k \sqrt{d_k} dk​ ​。以下是详细解释&#xff1a; 缩放的原因 除以 d k \sqrt{d_k} dk​ ​ 的原因有两个&#xff1a; 防止输入过大&#xff1a;如果不缩放&#xf…...

安装MongoDB UI客户端工具:mongodb-compass-1.40.2-win32-x64.msi

文章目录 1、安装 mongodb-compass-1.40.2-win32-x64.msi2、安装后配置链接地址&#xff1a; 1、安装 mongodb-compass-1.40.2-win32-x64.msi 2、安装后配置链接地址&#xff1a;...

一行命令搞定内网穿透

一行命令搞定内网穿透 一款开源免费的内网穿透工具&#xff1a;localtunnel &#xff0c;基于 nodejs 实现&#xff0c;无需修改 DNS 和防火墙设置&#xff0c;方便快捷的将内网服务暴露到外网&#xff0c;为开发人员、测试人员以及需要分享本地项目的人提供实时的公网访问方式…...

C语言——扫雷游戏

扫雷游戏通常是一个由方格组成的区域内进行的&#xff0c;其中随机分布着一定数量的地雷 。玩家的目标是通过点击方格来标记出所有地雷的位置&#xff0c;同时避免自己点到地雷而导致游戏失败。游戏开始时&#xff0c;玩家通常只能看到一部分方格&#xff0c;而其余的方格则需要…...

【LLM】-16-评估LLM-与标准答案的差距

目录 1、评估回答是否正确 1.1、util_zh 1.2、eval_zh 1.3、评估 2、评估生成答案与标准答案的差距 2.1、eval_zh2 2.2、评估 即使没有提供的理想答案&#xff0c;只要能制定一个评估标准&#xff0c;就可以使用一个 LLM 来评估另一个 LLM 的输出。 如果可以提供理想答…...

WeNet 2.0:更高效的端到端语音识别工具包

WeNet 2.0:更高效的端到端语音识别工具包 原文链接&#xff1a;[2203.15455] WeNet 2.0: More Productive End-to-End Speech Recognition Toolkit (arxiv.org) 1.摘要 WeNet是一个开源的端到端语音识别工具包&#xff0c;WeNet 2.0在此基础上进行了四项主要更新&#xff0c…...

阿里大模型调用 = 》通义千问大语言模型

背景&#xff1a;简单的通过API或者SDK在线调用阿里云大模型&#xff08;基于百炼平台&#xff09;&#xff0c;基于在线知识库 参考地址&#xff1a;安装阿里云百炼SDK_大模型服务平台百炼(Model Studio)-阿里云帮助中心 (aliyun.com) 1、获取API-KEY 当您通过API/SDK调用大模…...

idea使用free流程,2024idea免费使用

1.先到官网下载&#xff0c;这里选择win系统的&#xff0c;点击下图的.exe https://www.jetbrains.com/idea/download/?sectionwindows 2.下载好后基本上就是一直点击“下一步”到直到安装好&#xff0c;安装好后先打开软件后关闭退出 3.下载配配套资料 链接: https://pan.ba…...

算法_链表专题---持续更新

文章目录 前言两数相加题目要求题目解析代码如下 两两交换链表中的结点题目要求题目解析代码如下 重排链表题目要求题目解析代码如下 合并K个升序链表题目要求题目解析 K个一组翻转链表题目要求题目解析代码如下 前言 本文将记录leetcode链表算法题解&#xff0c;包含题目有&a…...

在Windows MFC\C++编程中,如何使用OnCopyData函数

在C中&#xff0c;OnCopyData 函数通常不是标准C库的一部分&#xff0c;而是与特定的图形用户界面&#xff08;GUI&#xff09;框架相关联&#xff0c;如Microsoft Foundation Classes (MFC) 或 Windows API 编程。在MFC应用程序中&#xff0c;OnCopyData 是用于处理来自其他应…...

【Qt】项目代码

main.cpp文件 argc&#xff1a;命令行参数个数。*argv[ ]&#xff1a;每一个命令行参数的内容。main的形参就是命令行参数。QApplication a(argc, argv) 编写一个Qt的图形化界面程序&#xff0c;一定需要QApplication对象。 widget w; 在创建项目的时候&#xff0c;勾选widg…...

MySQL中常用工具

MySQL自带的系统数据库 常用工具 MySQL mysqladmin mysqlbinlog mysqldump mysqlimport/source mysqlimport只能导入文本文件&#xff0c;不能导入sql文件...

关于儿童编程语言

青少年通常会通过Scratch或Python开始学习编程。在这两种语言中&#xff0c;代码的编写&#xff08;或者在Scratch中是构建&#xff09;方式类似于英语&#xff0c;这使得初学者更容易学习。Scratch的一个重要卖点是对视觉和运动感知学习者非常友好。这些代码块按颜色编码&…...

[io]进程间通信 -信号函数 —信号处理过程

sighandler_t signal(int signum, sighandler_t handler); 功能&#xff1a; 信号处理函数 参数&#xff1a; signum&#xff1a;要处理的信号 handler&#xff1a;信号处理方式 SIG_IGN&#xff1a;忽略信号 SIG_DFL&#xff1a;执行默认操作 handler&#xff1a;捕捉信 …...

RoboDK的插件

目录 collision-free-planner&#xff1a; opc-ua&#xff1a; collision-free-planner&#xff1a; RoboDK 的无碰撞规划器插件使用概率路线图 (PRM) 自动在机器人工作空间内创建无碰撞路径。 有关无碰撞规划器的更多信息&#xff0c;请访问我们的 文档。 生成参数无碰撞…...

List<HashMap<String, Object>>排序

如果列表中的元素类型是List<HashMap<String, Object>>&#xff0c;排序时需要考虑到value可能是任意类型的对象。在这种情况下&#xff0c;你可以针对具体的类型进行比较&#xff0c;或者使用Comparable接口来确保对象可以被正确比较。 示例代码 假设我们想要根据…...

【大数据】探索大数据基础知识:定义、特征与生态系统

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 工&#x1f497;重&#x1f497;hao&#x1f497;&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题.…...

营销材料翻译质量对销售渠道的影响

在当今的全球市场中&#xff0c;与不同受众进行有效沟通的能力对于企业的成功至关重要。营销材料的高质量翻译在通过销售渠道塑造客户旅程方面发挥着重要作用&#xff0c;影响着知名度、参与度、转化率和保留率。方法如下&#xff1a; 提高品牌知名度 在销售渠道的顶端&#x…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

Visual Studio Code 扩展

Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后&#xff0c;命令 changeCase.commands 可预览转换效果 EmmyLua…...

数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 原创笔记&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 上一篇&#xff1a;《数据结构第4章 数组和广义表》…...