博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
获取身份证号码信息
阅读量:7244 次
发布时间:2019-06-29

本文共 2231 字,大约阅读时间需要 7 分钟。

unit Unit1;

interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls, Grids;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
protected
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses Math;
const
cCityCode: array[0..91] of string =(
'','','','','','','','','','','',
'北京','天津','河北','山西','内蒙古','','','','','',
'辽宁','吉林','黑龙江','','','','','','','',
'上海','江苏','浙江','安微','福建','江西','山东','','','',
'河南','湖北','湖南','广东','广西','海南','','','',
'重庆','四川','贵州','云南','西藏','','','','','','',
'陕西','甘肃','青海','宁夏','新疆','','','','','',
'台湾','','','','','','','','','',
'香港','澳门','','','','','','','','',
'国外');
function CheckCidInfo(mCidCode: string): string;
var
S: set of Char;
I: Integer;
vDateTime: TDateTime;
T: Double;
begin
if Length(mCidCode)<>18 then
begin
Result :='#编码必须是18位';
Exit;
end;
S :=[];
for I :=1 to 17 do Include(S, mCidCode[I]);
if S -['0'..'9']<>[] then
begin
Result :='#编码前17位必须是数字';
Exit;
end;
if not (mCidCode[18] in ['0'..'9','x','X']) then
begin
Result :='#最后一位必须是数字或者是X';
Exit;
end;
I := StrToIntDef(Copy(mCidCode,1,2),0);
if (I > High(cCityCode)) or (cCityCode[I]='') then
begin
Result :='#地址码不正确';
Exit;
end;
Result :='地区:'+ cCityCode[I];
if not TryStrToDate(Copy(mCidCode,7,4)+'-'+
Copy(mCidCode,11,2)+'-'+ Copy(mCidCode,13,2), vDateTime) then
begin
Result :='#生日码不正确'+ Copy(mCidCode,7,4)+'-'+
Copy(mCidCode,11,2)+'-'+ Copy(mCidCode,13,2);
Exit;
end;
if (vDateTime > Date) or (vDateTime < StrToDate('1900-10-01')) then
begin
Result :='#生日不符合逻辑';
Exit;
end;
Result := Result +' 生日:'+ FormatDateTime('yyyy-mm-dd', vDateTime);
if mCidCode[18] in ['x','X'] then mCidCode[18]:='a';
T :=0;
for I :=18 downto 1 do
T := T + Trunc(Power(2, I -1)) mod 11* StrToInt('$'+ mCidCode[19- I]);
if Trunc(T) mod 11<>1 then
begin
Result :='#非法校验码'+ IntToStr(Trunc(T) mod 11);
Exit;
end;
Result := Result +' 性别:'+
Copy(WideString('男女'), Ord(Ord(mCidCode[17]) mod 2=0)+1,1);
end;{ CheckCidInfo }
procedure TForm1.Button1Click(Sender: TObject);
begin
Caption := CheckCidInfo(Edit1.Text);
end;
end.

转载于:https://www.cnblogs.com/china1/p/3377682.html

你可能感兴趣的文章
Gentoo安装(UEFI+Stub_kernel+Systemd+awesome)
查看>>
找出apache日志中访问量最大的IP
查看>>
高可用集群之heartbeat v2--基于CRM实现mysql高可用集群(未完)
查看>>
linux 6.4使用xmanager4的配置
查看>>
Servlet--表单、超链接、转发、重定向4种情况的路径
查看>>
tomcat解压版exe文件启动闪退问题
查看>>
Skype多人群组视频功能免费了
查看>>
云桌面远程协助
查看>>
CentOS(5.8/6.4)linux生产环境若干优化实战
查看>>
20145328 《信息安全系统设计基础》第5周学习总结
查看>>
10.使用子查询 ---SQL
查看>>
Linux下chkconfig命令详解
查看>>
坦克大战---可能带BUG
查看>>
excel表数据分列
查看>>
3、kvm虚拟机日常管理与配置
查看>>
php各个模式、版本的区别
查看>>
shell中的点命令与source命令
查看>>
我的友情链接
查看>>
百度 ueditor 富文本编辑器的使用心得 jsp版本 1.4的JDK weblogic8
查看>>
软件安装
查看>>