c++ builder 身份核查软件 - 无幻の编程 - 对于一个初学者来说,野心也是必须的...
c++ builder 身份核查软件
开发身份证识别的应用程序
设计一个18位身份证号码的识别程序,显示出身份证归属地、身份证中的出生年月以及性别信息。程序中需要增加身份证的有效性验证,判断身份证的合法性。
图片是从网上截下来的,编程工具利用c++ builder6 ,目前只完成18位身份证号码的核查功能。作为实验课的作品,现上传上来。
代码如下,部分直接设定属性或事件的,请参照代码。
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString a,b,c,d,f,i,j;
String id;int sum=0;
id=Edit1->Text; ;
int w[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
char y[11]={'1','0','X','9','8','7','6','5','4','3','2'};
if(id.Length()!=18)
{
ShowMessage("输入的身份证号长度不对!");
return;
}
for(int k=0;k<17;k++)
{
sum+=StrToInt(id[k+1])*w[k];
}
if (id.Length()==18 && id[18]==y[sum%11])
{
Edit1->SelStart=0;
Edit1->SelLength=2;
j=Edit1->SelText;
switch(StrToInt(j))
{
case 11:i="北京市";break;
case 12:i="天津市";break;
case 13:i="河北省";break;
case 14:i="山西省";break;
case 15:i="内蒙古自治区";break;
case 21:i="辽宁省";break;
case 22:i="吉林省";break;
case 23:i="黑龙江省";break;
case 31:i="上海市";break;
case 32:i="江苏省";break;
case 33:i="浙江省";break;
case 34:i="安徽省";break;
case 35:i="福建省";break;
case 36:i="江西省";break;
case 37:i="山东省";break;
case 41:i="河南省";break;
case 42:i="湖北省";break;
case 43:i="湖南省";break;
case 44:i="广东省";break;
case 45:i="广西壮族自治区";break;
case 46:i="海南省";break;
case 50:i="重庆市";break;
case 51:i="四川省";break;
case 52:i="贵州省";break;
case 53:i="云南省";break;
case 54:i="西藏自治区";break;
case 61:i="陕西省";break;
case 62:i="甘肃省";break;
case 63:i="青海省";break;
case 64:i="宁夏回族自治区";break;
case 65:i="新疆维吾尔自治区";break;
case 71:i="台湾省";break;
case 81:i="香港特别行政区";break;
case 82:i="澳门特别行政区";break;
default:i="未知地区";break;
}
Edit1->SelStart=16;
Edit1->SelLength=1;
d=Edit1->SelText;
if((StrToInt(d)%2)==1)
{
f="男";
}
else
{
f="女";
}
Edit1->SelStart=6;
Edit1->SelLength=4;
a=Edit1->SelText;
Edit1->SelStart=10;
Edit1->SelLength=2;
b=Edit1->SelText;
Edit1->SelStart=12;
Edit1->SelLength=2;
c=Edit1->SelText;
Label1->Caption="您是"+i+"人"+a+"年"+b+"月"+c+"日生,"+f+"性!";
return;
}
else
ShowMessage("输入的身份证号不正确!");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if(Key==13)
{
Button1Click(Sender);
return;
}
if(!(Key>='0' && Key<='9' || Key==8 || Key=='x' || Key==13) ) //允许输入0~9的数字,退格键,X字符和回车键
{
ShowMessage("只能输入数字");
Key = 0;
}
String S=Edit1->Text;
if(S.Length()<17) //1~17位身份证号码不允许输入X字符
{
if(Key=='x')
{
ShowMessage("只能输入数字");
Key = 0;
}
}
}
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString a,b,c,d,f,i,j;
String id;int sum=0;
id=Edit1->Text; ;
int w[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
char y[11]={'1','0','X','9','8','7','6','5','4','3','2'};
if(id.Length()!=18)
{
ShowMessage("输入的身份证号长度不对!");
return;
}
for(int k=0;k<17;k++)
{
sum+=StrToInt(id[k+1])*w[k];
}
if (id.Length()==18 && id[18]==y[sum%11])
{
Edit1->SelStart=0;
Edit1->SelLength=2;
j=Edit1->SelText;
switch(StrToInt(j))
{
case 11:i="北京市";break;
case 12:i="天津市";break;
case 13:i="河北省";break;
case 14:i="山西省";break;
case 15:i="内蒙古自治区";break;
case 21:i="辽宁省";break;
case 22:i="吉林省";break;
case 23:i="黑龙江省";break;
case 31:i="上海市";break;
case 32:i="江苏省";break;
case 33:i="浙江省";break;
case 34:i="安徽省";break;
case 35:i="福建省";break;
case 36:i="江西省";break;
case 37:i="山东省";break;
case 41:i="河南省";break;
case 42:i="湖北省";break;
case 43:i="湖南省";break;
case 44:i="广东省";break;
case 45:i="广西壮族自治区";break;
case 46:i="海南省";break;
case 50:i="重庆市";break;
case 51:i="四川省";break;
case 52:i="贵州省";break;
case 53:i="云南省";break;
case 54:i="西藏自治区";break;
case 61:i="陕西省";break;
case 62:i="甘肃省";break;
case 63:i="青海省";break;
case 64:i="宁夏回族自治区";break;
case 65:i="新疆维吾尔自治区";break;
case 71:i="台湾省";break;
case 81:i="香港特别行政区";break;
case 82:i="澳门特别行政区";break;
default:i="未知地区";break;
}
Edit1->SelStart=16;
Edit1->SelLength=1;
d=Edit1->SelText;
if((StrToInt(d)%2)==1)
{
f="男";
}
else
{
f="女";
}
Edit1->SelStart=6;
Edit1->SelLength=4;
a=Edit1->SelText;
Edit1->SelStart=10;
Edit1->SelLength=2;
b=Edit1->SelText;
Edit1->SelStart=12;
Edit1->SelLength=2;
c=Edit1->SelText;
Label1->Caption="您是"+i+"人"+a+"年"+b+"月"+c+"日生,"+f+"性!";
return;
}
else
ShowMessage("输入的身份证号不正确!");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if(Key==13)
{
Button1Click(Sender);
return;
}
if(!(Key>='0' && Key<='9' || Key==8 || Key=='x' || Key==13) ) //允许输入0~9的数字,退格键,X字符和回车键
{
ShowMessage("只能输入数字");
Key = 0;
}
String S=Edit1->Text;
if(S.Length()<17) //1~17位身份证号码不允许输入X字符
{
if(Key=='x')
{
ShowMessage("只能输入数字");
Key = 0;
}
}
}
//---------------------------------------------------------------------------