一、格式介绍:

【15位号码格式】

1、第l一6位数为行政区划代码;

2、第7-12位数为出生日期代码;

3、第13---15位数为分配顺序代码;

(1)、行政区划代码,是指公民第一次申领居民身份证时的常住户口所在地的行政地区。

(2)、出生日期代码,第7-8位数代表年份(年份前面二位数省略),第9-10位数代表月份(月份为l位数的前面加零)。第11一12位数代表日期(日期为1位数的前面加零)。

(3)、分配顺序代码,是按人口数统一合理分配以固定顺序给予每个人的顺序号,最末一位数是奇数的分配给男性,偶数分配给女性。

【18位号码格式】

1. 1~6位为地区代码;

(其中1、2位数为各省级政府的代码,3、4位数为地、市级政府的代码,5、6位数为县、区级政府代码。)

2. 7~14位为出生年月日

3.15~17位为顺序号,是县、区级政府所辖派出所的分配码,每个派出所分配码为10个连续号码,例如“000-009”或“060-069”,其中单数为男性分配码,双数为女性分配码,如遇同年同月同日有两人以上时顺延第二、第三、第四、第五个分配码。如:007的就是个男生 而且和他同年月日生的男生至少有两个 他们的后四位是001* 和 003*

4.18位为效验位(识别码),通过复杂公式算出,普遍采用计算机自动生成。是前面17位的一种检验代码,如果你改变了前面某个数字而后面的效验代码不响应改变就会被计算软件判断为非法身份正号码。X也是效验代码的一种,代表数字10;

二.代码部分:

功能:
 1.实现身份号码的有效性检查
 2.实现身份号码出生日期与性别自动匹配

//检查身份证号码是否为有效
function CheckIDCard(IDCard: String):Boolean;
const
OLD_LENGTH = 15; //15位长度
NEW_LENGTH = 18; //18位长度
DaysOfMonths: array [1..12] of Integer = (31,28,31,30,31,30,31,31,30,31,30,31); //月天数数组
DaysOfMonths1: array [1..12] of Integer = (31,29,31,30,31,30,31,31,30,31,30,31);
var
Len: Integer;
AYear,AMonth,ADay : Integer;
function IsNum(Value: String):Boolean;
var
I: Integer;
begin
Result := True;
for I:=1 to Length(Value) do
begin
if not(Value[I] in['0'..'9']) then
begin
Result := False;
Exit;
end;
end;
end;
begin
Result := False;
Len := length(IDCard);
if (Len<>OLD_LENGTH) and (Len<>NEW_LENGTH) then Exit;
//检查是否为数字
if Len = OLD_LENGTH then
begin
//15位
if Not IsNum(IDCard) then Exit;
AYear := StrToInt('19'+Copy(IDCard,7,2));
AMonth := StrToInt(Copy(IDCard,9,2));
ADay := StrToInt(Copy(IDCard,11,2));
end else
begin
//18位
if IDCard[NEW_LENGTH] = 'X' then
begin
if Not IsNum(Copy(IDCard,1,NEW_LENGTH-1)) then Exit;
end else
begin
if Not IsNum(IDCard) then Exit;
end;
//检查校验位
if IDCard[NEW_LENGTH] <> IDCardCheckSum(IDCard) then Exit;
AYear := StrToInt(Copy(IDCard,7,4));
AMonth := StrToInt(Copy(IDCard,11,2));
ADay := StrToInt(Copy(IDCard,13,2));
end;
//检查年月日的有效性
if not(AMonth in[1..12]) then Exit;
if(IsLeapYear(AYear)) then
begin
if not(ADay in[1..DaysOfMonths1[AMonth]]) then Exit;
end else
begin
if not(ADay in[1..DaysOfMonths[AMonth]]) then Exit;
end;
Result := True;
end; //将15的身份证号码转换为18位
function IDCardTo18(IDCard: string):string;
const
OLD_LENGTH = 15;
var
newid: string;
begin
if length(IDCard) <> OLD_LENGTH then
begin
result:= IDCard;
Exit;
end
else begin
newid:= IDCard;
insert('19', newid, 7);
result:= newid + IDCardCheckSum(IDCard);
end;
end; //代码实现部分
procedure TForm1.Query1idcardSetText(Sender: TField;const Text: String);
var
__Text,__S: String;
__idcard:string;
__b : boolean;
__sex:Integer;
begin
inherited;
__Text := Text;
if __Text = '' then Exit;
__idcard:=__text;
__b:= CheckIDCard(__Text); //调用CheckIDCard函数,检查号码的有效性
if (length(__idcard) >6) and (length(__idcard)<=12) then begin
if ((Ord(__idcard[1])>=64) and (Ord(__idcard[1])<=126)) or ((length(__idcard)>6) and (length(__idcard)<=12)) then begin
__b:=true;
end;
end;
if __b then begin
Sender.Value := __Text;
//15位
if Length(__Text)=15 then begin
//匹配出生日期;
__S:='19'+copy(__Text,7,2)+'-'+copy(__Text,9,2)+'-'+copy(__Text,11,2);
Query1birthday.Value:=strtodate(__S);
//匹配性别;
__sex:=StrToInt(__Text[15]);
if __sex mod 2 =0 then begin
Query1guestsex.Value:=1
end else Query1guestsex.Value:=0
end;
//18位
if Length(__Text)=18 then begin
__S:=copy(__Text,7,4)+'-'+copy(__Text,11,2)+'-'+copy(__Text,13,2);
Query1birthday.Value:=strtodate(__S);
__sex:=StrToInt(__Text[17]);
if __sex mod 2 =0 then begin
Query1guestsex.Value:=1
end else Query1guestsex.Value:=0
end;
end else
raise Exception.Create('输入的身份证号码无效,请检查!');
end;
												

输入身份证号码自动读取生日与性别(delphi)的更多相关文章

  1. C#根据身份证号码,计算生日、年龄、性别

    朋友谈及身份证相关的信息,才了解到原来省份证号码中包含了年龄和性别. 这样在数据库中,就不必单独留字段存放它们了(不过,要根据具体情况来,要是读取频率较高,还是单独列出为好),这样顺带解决了年龄变更的 ...

  2. 【代码笔记】iOS-传身份证号码可返回生日字符串

    代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. NS ...

  3. PHP提取身份证号码中的生日并验证是否成年的函数

    php 提取身份证号码中的生日日期以及确定是否成年的一个函数.可以同时确定15位和18位的身份证,经本人亲测,非常好用,分享函数代码如下: <?php //用php从身份证中提取生日,包括15位 ...

  4. php提取身份证号码中的生日日期以及验证是否为未成年人的函数

    php 提取身份证号码中的生日日期以及确定是否成年的一个函数.可以同时确定15位和18位的身份证,经本人亲测,非常好用,分享函数代码如下: <?php //用php从身份证中提取生日,包括15位 ...

  5. 身份证号码自动生成程序(Python)

    今天收到一个小需求:需要一个自动生成身份证号码的小程序.近期用python较多,因此打算用python实现. 需求细化: 1.身份证必须能够通过身份证校验程序. 2.通过查询,发现身份证号码是有国家标 ...

  6. 根据用户输入的二代身份证号码自动为其计算生成出生日期的javascript方法

    if(idTypeIsChecked.checked == true){//如果选中的是二代身份证 var birthDateValue = document.getElementById('idNu ...

  7. IOS 根据身份证号码获取 年龄 生日 性别

    /** 从身份证上获取年龄 18位身份证 */ -(NSString *)getIdentityCardAge:(NSString *)numberStr { NSDateFormatter *for ...

  8. mysql从身份证号中提取生日、性别

    SELECT p.ID, p.IDCardNo, IF ( LENGTH(p.IDCardNo) , CAST( , ) AS DATETIME ), CAST( CONCAT( ', , ) ) A ...

  9. 随机手机号和身份证号码(python)

    在使用selenium2 python自动化过程中,用户添加的时候程序设置的手机号和身份证号码是唯一的,这方面python代码可以实现,以下是调试成功,可以实现的. 具体代码如下 身份证需要下载dis ...

随机推荐

  1. CSS border-radius 圆角

    本文转自:http://www.kwstu.com/Admin/ViewArticle/201409151549476225 border-radius属性主要用于设置div圆角效果. 使用方法 bo ...

  2. zTree应用实例详讲(3)

    zTree应用实例详讲(3) 上一讲中,已经讲到了重命名与删除.那么这一讲,我们来做新建文件夹. 其实新建是非常简单的,想一下我们想要的效果:点击新建,然后在一个节点下面出现一个新建的文件夹,并且与此 ...

  3. 给Amazon ec2 增加卷(Volume)并挂载到系统

    给Amazon ec2 增加卷(Volume)并挂载到系统 前言 导师让师弟把实验的网站挂到亚马逊的EC2云服务器上.师弟对linux不太熟悉.就跑过来问我.于是花了一个小时搞定.问题主要是将EC2的 ...

  4. 学会Func

    学会Func 前言 首先你要会最基本的委托的使用,如果不会,看起来可能会有难度.. 不过第一个例子将帮你复习一下委托delegate 接下来通过几个例子就会学会怎么灵活使用Func了   委托回顾(d ...

  5. 一款可定制的外国jQuery图表插件jqplot

    jqPlot是一个jQuery绘图插件,可以利用它制作漂亮的线状图和柱状图.jqPlot支持为图表设置各种不同的样式.提供Tooltips,数据点高亮显示等功能. 用法: 1.引入jQuery类库和相 ...

  6. 通告机制Notification

    Obj-c的基本通讯原则是对象间的消息传递,这种情况多出现在两个对象之间.但是如果多个对象共同关注一个对象状态的时候呢,当然可以让发生事件的对象向所有关注他的对象发送消息,但是这并不高效.所以有了通告 ...

  7. 内容中断随想录(risc cpu的那些事)

    发一下牢骚和主题无关: [ 声明:版权所有,欢送转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 从消费电子的soc芯片来讲,当初海内从事芯片设计的企业还是很多的,这其 ...

  8. 数据意识崛起,从企业应用看BI软件的未来发展

    前阵子,和一群企业CIO聊天,希望从甲方角度看看对BI产品的看法.在问及一些成熟企业为何不上BI项目时,大家纷纷表示目前还处于观望状态. 提及BI,大家都觉得有些飘忽,和大数据一样,听着高大上,能真正 ...

  9. Jdon框架开发指南

    Jdon框架快速开发指南 开发主要步骤如下: JdonFramework6.0以上两步开发见这里. 快速配置指南 新增/查询/修改/删除(CRUD); 批量查询和分页显示 本文Step By Step ...

  10. elasticsearch基本概念

    NRT(近实时搜索) Elasticsearch是一个NRT平台.这意味着当你索引一个文件时,在细微的延迟(通常1s)之后,该文件才能被搜索到. Cluster(集群) cluster是在所有节点中保 ...