问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

C++ 18位身份证格式验证

发布网友 发布时间:2022-05-03 08:58

我来回答

3个回答

热心网友 时间:2023-10-17 19:22

#include <iostream.h>
#include <string.h>
bool judgeday(int,int,int);
bool judgeformat(char *);
bool judge17bit(char *);
void enterID();
char input[100];
void main()
{
for(;;)
{

enterID();
if(judgeformat(input)==false||judge17bit(input)==false)
continue;
else
{
cout<<"合法身份证件!"<<endl;
break;
}
}

}
bool judgeday(int day,int mouth,int year)
{
int dayArray[12]={31,28,31,30,31,30,31,31,30,31,30,31};

if(year%400==0||year%4==0&&year%100!=0)
dayArray[1]=29;
if(day>dayArray[mouth-1])
return false;
else
return true;
}
bool judgeformat(char *str)
{
for(int i=0;i<=16;i++)
{
if(str[i]<'0'||str[i]>'9')
{
cout<<"error!非法身份证号:前17位为数字!"<<endl;
return false;
}
else
if(str[17]<'0'||str[17]>'9'&&str[17]!='X')
{
cout<<"error!非法身份证号:第十八位为数字或'X'"<<endl;
return false;
}
}
int year,mouth,day;
year=((int)str[6]-48)*1000+((int)str[7]-48)*100+((int)str[8]-48)*10+((int)str[9]-48);
mouth=((int)str[10]-48)*10+((int)str[11]-48);
day=((int)str[12]-48)*10+((int)str[13]-48);
if(year>2010||year<1910||mouth>12||judgeday(day,mouth,year)==false)
{
cout<<"error!非法身份证号:请输入正确出生年月!"<<endl;
return false;
}

return true;
}
void enterID()
{
while(1)
{
cout<<"请输入你的身份证号:";
cin>>input;
if(18!=strlen(input))
cout<<"error!非法身份证号:请输入18位ID!"<<endl;
else
break;
}
}
bool judge17bit(char *str)
{
int quan[]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
char jiaoyan[]={'1','0','X','9','8','7','6','5','4','3','2'};
char code17bit;
int i,sum=0,mod;
for(i=0;i<17;i++)
sum+=(str[i]-48)*quan[i];
mod=sum%11;
code17bit=jiaoyan[mod];
if (code17bit==str[17])
return true;
else
{
cout<<"error!校验码错误!"<<endl;
return false;
}
}
看看是不是你想要的,可以校验合法的出生年月,数据格式,以及身份证是否有效。

热心网友 时间:2023-10-17 19:23

用string存。比如
string abc;
abc=身份证号;
abc[n]就表示这个字符串的第n位置。然后比较

热心网友 时间:2023-10-17 19:23

将ID号存成string型id,用id.substr(7,8)取的日期,存入string型的date,然后再将date转化为对应的数字,number=strtol(date,&endpos,10)
(注:string endpos;),后面的事相信你会做了吧

热心网友 时间:2023-10-17 19:22

#include <iostream.h>
#include <string.h>
bool judgeday(int,int,int);
bool judgeformat(char *);
bool judge17bit(char *);
void enterID();
char input[100];
void main()
{
for(;;)
{

enterID();
if(judgeformat(input)==false||judge17bit(input)==false)
continue;
else
{
cout<<"合法身份证件!"<<endl;
break;
}
}

}
bool judgeday(int day,int mouth,int year)
{
int dayArray[12]={31,28,31,30,31,30,31,31,30,31,30,31};

if(year%400==0||year%4==0&&year%100!=0)
dayArray[1]=29;
if(day>dayArray[mouth-1])
return false;
else
return true;
}
bool judgeformat(char *str)
{
for(int i=0;i<=16;i++)
{
if(str[i]<'0'||str[i]>'9')
{
cout<<"error!非法身份证号:前17位为数字!"<<endl;
return false;
}
else
if(str[17]<'0'||str[17]>'9'&&str[17]!='X')
{
cout<<"error!非法身份证号:第十八位为数字或'X'"<<endl;
return false;
}
}
int year,mouth,day;
year=((int)str[6]-48)*1000+((int)str[7]-48)*100+((int)str[8]-48)*10+((int)str[9]-48);
mouth=((int)str[10]-48)*10+((int)str[11]-48);
day=((int)str[12]-48)*10+((int)str[13]-48);
if(year>2010||year<1910||mouth>12||judgeday(day,mouth,year)==false)
{
cout<<"error!非法身份证号:请输入正确出生年月!"<<endl;
return false;
}

return true;
}
void enterID()
{
while(1)
{
cout<<"请输入你的身份证号:";
cin>>input;
if(18!=strlen(input))
cout<<"error!非法身份证号:请输入18位ID!"<<endl;
else
break;
}
}
bool judge17bit(char *str)
{
int quan[]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
char jiaoyan[]={'1','0','X','9','8','7','6','5','4','3','2'};
char code17bit;
int i,sum=0,mod;
for(i=0;i<17;i++)
sum+=(str[i]-48)*quan[i];
mod=sum%11;
code17bit=jiaoyan[mod];
if (code17bit==str[17])
return true;
else
{
cout<<"error!校验码错误!"<<endl;
return false;
}
}
看看是不是你想要的,可以校验合法的出生年月,数据格式,以及身份证是否有效。

热心网友 时间:2023-10-17 19:23

用string存。比如
string abc;
abc=身份证号;
abc[n]就表示这个字符串的第n位置。然后比较

热心网友 时间:2023-10-17 19:23

将ID号存成string型id,用id.substr(7,8)取的日期,存入string型的date,然后再将date转化为对应的数字,number=strtol(date,&endpos,10)
(注:string endpos;),后面的事相信你会做了吧
有关Excel中18位身份证号与15位身份证号比对的问题

1、把身份证号存在A列,2、在B1写公式,=len(a1)3、拖动b1控制点向下填充,4、点击自动筛选,5、在B列,选择15,这样显示出来的数据就是15位的身份证号。

关于C语言或者PHP程序的问题,着急!!

通过一个正则表达式来判断给定的身份证号是否符合满足18位且前17位只能是数字,最后一位只能是大写X,小写x和数字这样的规则,也就是我国现行第二代身份证号码的格式规则.如果验证不通过则打印提示信息,并退出当前程序(也就是后面的程序(功能)不再执行了).如果通过了上一步的身份证格式验证之后,那么从给...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
月经来了肚子非常痛怎么办 怎样解决肝火旺焦虑症? 怎样解决肝火旺、肝郁? 求高中物理中所有单位的分解 魔兽法师解除诅咒咋用?哪一类是诅咒而不是DEBUFF。我中毒(安其拉)解不... 2009年高考河南考生要多少分报北京理工可以有把握啊? 十代广汽本田雅阁车门排水孔在哪里 三焦辩证三焦病证的分类 液晶电视尺寸是多少 液晶电视尺寸大全 石家庄燃气卡没卡号在哪儿缴费 车划痕怎么走车损险 汽车划痕严重怎么走车损险 国家保安员资格考试大纲 答案 微信被限制红包收款功能怎么解除 最美的路虎,这样的车为何国内卖不好? 如何把群从200人扩展到500人规模? 青辣椒炒肉怎么炒 什么游戏可以苹果手机小米手机一起组队打怪升级,打装备 怎么删除C盘垃圾文件,清理C盘 有什么单机游戏可以局域玩一起升级打怪通关的那种呢? 能组队打怪升级捡装备办任务的单机游戏 粤语1-100数字怎么读 发音 视频 PSP、NDS能够自建人物组队打怪升级之类的游戏。 来个好玩的网络群战打怪升级的游戏要不要前都行 青辣子炒肉怎么炒好吃 教师资格证有对计算机证的要求吗 教师资格证面试为什么监考老师都看电脑? 计算机教师资格证 北方计算机的老师都有教师资格证吗? 有没有能组队打怪升级的网络游戏 QQ邮箱群邮件怎么全部删除啊?一共有几百封邮件 急急急急急死了!!!qq邮箱里群邮件发错了,怎么删除呀!! 怎样才可以把已发的QQ群邮件删除 # QQ邮箱的群邮件,怎么把别人发的邮件彻底删除? 有方法可以通过直接加好友吗? 如何清除QQ邮箱群邮件已发信息 双色球下期开将时间 capital city什么意思 linux可以做哪些毕业设计 Linuxdeepin下如何安装Windows embedded standard7 64位? 我想在淘宝上要求换货,但我已经付款了,该怎么操作 怎么才能让深度deepin liunx系统运行windows下的程序呢? 我上淘宝买东西,尺寸不对我就要换货,怎么办 我的手机老是出现这个Netcore这是什么意思? netcore磊科无线网路由器要用什么哪种管理路由器的手机软件可以登陆路由器啊????轻松上网可以 netcore 这是什么网络?? linux软件开发怎么样?我比较热爱算法,还有设计方面的.....往linux那个方向发展比较好...最后给个详细解答 谁知道小学简笔画的特点和类型,急用。 我是学linux运维的,女生,以后走哪方面比较好 手机蓝牙如何连接电脑蓝牙
  • 焦点

最新推荐

猜你喜欢

热门推荐