判断我国公民的身份证是否合法

原创 2015年07月08日 21:02:22

//我国公民的身份证号码特点如下:
//1、     长度为18位;
//2、     第1~17位只能为数字;
//3、     第18位可以是数字或者小写英文字母x。
//4、     身份证号码的第7~14位表示持有人生日的年、月、日信息。
//例如:511002198808080111或51100219880808011x。
//请实现身份证号码合法性判断的函数。除满足以上要求外,需要对持有人生日的年、月、日信息进行校验。年份大于等于1900年,
//小于等于2100年。需要考虑闰年、大小月的情况。所谓闰年,能被4整除且不能被100整除 或 能被400整除的年份,闰年的2月份为29天,
//非闰年的2月份为28天。其他情况的合法性校验,考生不用考虑。函数返回值:
//1)  如果身份证号合法,返回0;
//2)  如果身份证号长度不合法,返回1;
//3)  如果身份证号第1~17位含有非数字的字符,返回2;
//4)  如果身份证号第18位既不是数字也不是英文小写字母x,返回3;
//5)  如果身份证号的年信息非法,返回4
//6)  如果身份证号的月信息非法,返回5;
//7)  如果身份证号的日信息非法,返回6(请注意闰年的情况);
#include<iostream>
#include<string>
using namespace std;
int getResult(string s )
{
 int len=s.size();
 int y=0;
 int m=0;
 int d=0;
 if(len==18)
 {
  for(int i=0;i<17;i++)
  {
   if(!isdigit(s[i]))
    return 2;
  }
  if(!isdigit(s[17])&&s[17]!='x')
   return 3;
  for(int i=6;i<10;i++)
  {
   y=y*10+s[i]-'0';
  }
  if(y>2100||y<1900)
   return 4;
  for(int i=10;i<=11;i++)
  {
   m=m*10+s[i]-'0';
  }
  if(m>12||m<1)
   return 5;
  for(int i=12;i<=13;i++)
  {
   d=d*10+s[i]-'0';
  }
  if(d<1||d>31)
   return 6;
  if(d==31&&(m==4||m==6||m==9||m==11))
   return 6;
  if(d==30&&(m==1||m==3||m==5||m==7||m==8||m==10||m==12))
   return 6;
  if(m==2)
  {
   if(d==29)
    if(y%4!=0||(y%400!=0&&y%100==0))
     return 6;
  }
 }
 else
  return 1;
 return 0;
}
void main()
{
 string s;
 getline(cin,s);
 cout<<getResult(s)<<endl;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

js判断身份证是否合法

function IDCardCheck(num) {     num = num.toUpperCase();     //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后...
  • cengjingcanghai123
  • cengjingcanghai123
  • 2014年06月19日 14:53
  • 1263

javascript判断身份证是否合法

http://www.w3.org/TR/html4/loose.dtd"> Check card no cript">   var vcity={ 11:"北京",12:"天...
  • zzq19860626
  • zzq19860626
  • 2013年08月23日 13:54
  • 3102

Java验证身份证是否合法

Java验证身份证是否合法
  • u012099338
  • u012099338
  • 2015年11月19日 09:29
  • 2783

Java 判断身份证Id是否合法

Java 判断身份证Id是否合法          Java 判断身份证Id是否合法,具体的还是以公安局的为准,这里只是做参考。 package utils; import java.tex...
  • qiu_11
  • qiu_11
  • 2015年09月30日 15:34
  • 925

身份证号码合法性判断

问题描述:  我国公民的身份证号码特点如下: 1、长度为18位; 2、第1~17位只能为数字; 3、第18位可以是数字或者小写英文字母x。 4、身份证号码的第7~14位表示持有人生日的年、月...
  • hs794502825
  • hs794502825
  • 2014年07月22日 21:27
  • 4582

验证身份证是否合法的c#代码

///         /// 验证18位身份证号         ///         /// 身份证号         /// 验证成功为True,否则为False        ...
  • s1102379635
  • s1102379635
  • 2012年09月11日 14:41
  • 1761

验证身证是否合法,并且取得里面的生日日期

package cn.javase.util; import java.util.regex.Matcher; import java.util.regex.Pattern; public cl...
  • emjava
  • emjava
  • 2011年10月05日 18:53
  • 280

使用SQL对身份证合法性检验

不多说   直接代码     USE [xd] GO /****** Object:  UserDefinedFunction [dbo].[IsvalidIDCard]    Script...
  • xufan007
  • xufan007
  • 2013年04月24日 16:33
  • 864

android 判断身份证号是否正确

下面是判断身份证是否正确的一个demo  可以直接通过Java 运行 ,也可以改成工具类 public class IDCard { /************************...
  • xq43701200
  • xq43701200
  • 2016年08月12日 16:58
  • 3620

JS验证身份证的合法性

JS验证身份证的合法性
  • qq_19524879
  • qq_19524879
  • 2015年07月02日 16:45
  • 2222
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:判断我国公民的身份证是否合法
举报原因:
原因补充:

(最多只允许输入30个字)