取得身份证号码的含义

此博客展示了一段身份证编码信息检查的程序代码。代码定义了城市代码数组,通过函数 CheckCidInfo 对输入的 18 位身份证编码进行多项检查,包括编码长度、前 17 位数字、最后一位字符、地址码、生日码、校验码等,最终输出地区、生日和性别等信息。
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.
内容概要:本文介绍了基于贝叶斯优化的CNN-LSTM混合神经网络在时间序列预测中的应用,并提供了完整的Matlab代码实现。该模型结合了卷积神经网络(CNN)在特征提取方面的优势与长短期记忆网络(LSTM)在处理时序依赖问题上的强大能力,形成一种高效的混合预测架构。通过贝叶斯优化算法自动调参,提升了模型的预测精度与泛化能力,适用于风电、光伏、负荷、交通流等多种复杂非线性系统的预测任务。文中还展示了模型训练流程、参数优化机制及实际预测效果分析,突出其在科研与工程应用中的实用性。; 适合人群:具备一定机器学习基基于贝叶斯优化CNN-LSTM混合神经网络预测(Matlab代码实现)础和Matlab编程经验的高校研究生、科研人员及从事预测建模的工程技术人员,尤其适合关注深度学习与智能优化算法结合应用的研究者。; 使用场景及目标:①解决各类时间序列预测问题,如能源出力预测、电力负荷预测、环境数据预测等;②学习如何将CNN-LSTM模型与贝叶斯优化相结合,提升模型性能;③掌握Matlab环境下深度学习模型搭建与超参数自动优化的技术路线。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注贝叶斯优化模块与混合神经网络结构的设计逻辑,通过调整数据集和参数加深对模型工作机制的理解,同时可将其框架迁移至其他预测场景中验证效果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值