提取身份证信息

简介: function GetIDInfoGetDInfo(const CardNo: string; var Sex,   BirthDay: string; var Age: Integer; var Area: string): Integer; var   iCardNo: Int64...

function GetIDInfoGetDInfo(const CardNo: string; var Sex,

  BirthDay: string; var Age: Integer; var Area: string): Integer;

var

  iCardNo: Int64;

  iYear, iSex: Integer;

  sBirth, fBirth: string;

  dBirth: TDateTime;

begin

  Result := 0; //表示身份证输入正确

  if (Length(CardNo) <> 15) and (Length(CardNo) <> 18) then

  begin

    Result := 1; //位长不对

    Exit;

  end;

  if Length(CardNo) = 15 then

  begin

    if not TryStrToInt64(CardNo, iCardNo) then

    begin

      Result := 2; //必须为数字

      Exit;

    end;

    sBirth := '19' + Copy(CardNo, 7, 6);

    iSex := StrToInt(Copy(CardNo, 15, 1));

    if Odd(iSex) then

      Sex := '男'

    else

      Sex := '女';

  end

  else

  begin

    if not TryStrToInt64(Copy(CardNo, 1, 17), iCardNo) then

    begin

      Result := 2; //前17位必须为数字

      Exit;

    end;

    sBirth := Copy(CardNo, 7, 8);

    iSex := StrToInt(Copy(CardNo, 17, 1));

    case iSex of

      0: Sex := '未知';

      1: Sex := '男';

      2: Sex := '女';

      9: Sex := '未说明';

    end;

  end;

  fBirth := Format('%s-%s-%s', [Copy(sBirth, 1, 4),

    Copy(sBirth, 5, 2), Copy(sBirth, 7, 2)]);

  if not TryStrToDate(fBirth, dBirth) then

  begin

    Result := 3; //生日格式不对

    Exit;

  end;

  iYear := YearsBetween(Date, dBirth);

  if (iYear < 0) or (iYear >= 120) then

  begin

    Result := 4; //年龄错误

    Exit;

  end;

  BirthDay := sBirth;

  Age := iYear;

  Area := GetArea(StrToInt(Copy(CardNo, 1, 2)));

end;

相关文章
|
缓存 Linux 测试技术
安装【银河麒麟V10】linux系统--并挂载镜像
安装【银河麒麟V10】linux系统--并挂载镜像
5706 0
|
存储 Shell 索引
如何在Bash中使用For循环和数组?
如何在Bash中使用For循环和数组?
763 0
|
存储 缓存 异构计算
大语言模型量化方法对比:GPTQ、GGUF、AWQ
在过去的一年里,大型语言模型(llm)有了飞速的发展,在本文中,我们将探讨几种(量化)的方式,除此以外,还会介绍分片及不同的保存和压缩策略。
5836 0
|
10月前
|
人工智能 自然语言处理 API
百聆:集成Deepseek API及语音技术的开源AI语音对话助手,实时交互延迟低至800ms
百聆是一款开源的AI语音对话助手,结合ASR、VAD、LLM和TTS技术,提供低延迟、高质量的语音对话体验,适用于边缘设备和低资源环境。
3124 5
百聆:集成Deepseek API及语音技术的开源AI语音对话助手,实时交互延迟低至800ms
|
12月前
|
人工智能 自然语言处理 搜索推荐
浪潮信息 Yuan-embedding-1.0 模型登顶MTEB榜单第一名
浪潮信息Yuan-Embedding-1.0模型在C-MTEB评测基准中荣获Retrieval任务第一名,推动中文语义向量技术发展
1768 7
浪潮信息 Yuan-embedding-1.0 模型登顶MTEB榜单第一名
|
10月前
|
数据采集 存储 NoSQL
AArch64架构调用链性能数据采集原理
本次分享的主题是AArch64架构调用链性能数据采集原理,由阿里云苏轩楠分享。主要分为五个部分: 1. 术语解释 2. Frame Pointer RegisterStack Unwind 3. Dwarf-based Stack Unwind 4. /BRBE/CSRE Stack Unwind 5. Kernel-space Stack Unwind&eBPF Unwinders
261 0
|
存储 人工智能 数据库
Chroma | AI应用开发
文将详细介绍Chroma向量数据库的功能特点、适应场景,并通过Python实操演示其基本使用方法【7月更文挑战第7天】
995 1
Chroma | AI应用开发
|
人工智能 自然语言处理 小程序
阿里通义音频生成大模型 FunAudioLLM 开源!
声音包含丰富的个体特征及情感情绪信息,对话作为人类最常使用亲切自然的交互模式,是连接人与智能世界至关重要的环节。
|
Unix Linux 异构计算
用于实时 Linux® 的 TwinCAT Runtime,基于 Linux® 的实时控制器开辟了新的应用可能性
**TwinCAT Runtime for Linux®** 打开了倍福实时控制的新领域,支持在同一PC上运行多个独立实例,促进硬件整合和效率提升。基于Debian的定制Linux发行版,内置实时内核,允许GPU驱动的高速应用如机器视觉。利用Docker等容器技术,实现模块化控制和资源优化,降低工程成本。此发行版将逐步扩展到更多倍福设备,为Linux用户提供熟悉的TwinCAT编程环境和增强的灵活性。
|
开发者 容器
Echarts饼图实现-今日进度-动态图
构建一个动态旋转的ECharts饼图,包括渐变色和动画效果。初始化ECharts实例,设置图表尺寸和背景,配置标题、颜色、系列数据及自定义渲染。利用`renderItem`绘制弧线和圆点,`getCirlPoint`计算坐标。通过`setInterval`和`draw`函数实现旋转动画。完整代码可在链接下载。
943 0
Echarts饼图实现-今日进度-动态图