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

原创 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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

我国公民的身份证号码合法性判断

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

[华为机试]判断身份证信息是否合法

[华为机试]

Java 判断身份证Id是否合法

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

js判断身份证是否合法

function IDCardCheck(num) {     num = num.toUpperCase();     //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后...

javascript判断身份证是否合法

http://www.w3.org/TR/html4/loose.dtd"> Check card no cript">   var vcity={ 11:"北京",12:"天...

校验出生日期,校验身份证格式,校验会员账户:9开头数字,校验手机号码是否合法,判断字符串中的url是否都是图片格式字符串,通过图片url读取图片并将图片转换成base64编码

校验出生日期,校验身份证格式,校验会员账户:9开头数字,校验手机号码是否合法,判断字符串中的url是否都是图片格式字符串,通过图片url读取图片并将图片转换成base64编码...

验证身份证是否合法

  • 2012年12月29日 14:05
  • 1KB
  • 下载

oracle自定义函数验证身份证是否合法

--身份证号校验位算法:            1:把前17位号码从第高位到低位与下列17个数字分别相乘求和(N):                『2,4,8,5,10,9,7,3,6,1,2,4,...

验证身份证是否合法

java源码: package com.jn.commons.utils; import java.text.ParseException; import java.text.SimpleDateF...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:判断我国公民的身份证是否合法
举报原因:
原因补充:

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