`
xidajiancun
  • 浏览: 452817 次
文章分类
社区版块
存档分类
最新评论

华为2011软件开发校园测试机试题--身份证号码合法性判断

 
阅读更多

身份证号码合法性判断

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

例如:511002198808080111或51100219880808011x。

请实现身份证号码合法性判断的函数。除满足以上要求外,需要对持有人生日的月日信息进行校验(大小月)。
比如0808表示8月8日月日信息,是合法的;0832表示8月32日,是非法的月日信息;1308表示13月8日,是非法的月日信息。
不需要考虑闰年的情况,2月份统一认为只有28天,测试用例不会输入闰年情况。其他情况的合法性校验,考生不用考虑。

函数返回值:
1) 如果身份证号合法,返回0;
2) 如果身份证号长度不合法,返回1;
3) 如果身份证号第1~17位含有非数字的字符,返回2;
4) 如果身份证号第18位既不是数字也不是英文小写字母x,返回3;
5) 如果身份证号上的日期信息非法,返回4;

[注]
除成功的情况外,以上其他合法性判断的优先级依次降低。也就是说,如果判断出长度不合法,直接返回1即可,不需要再做其他合法性判断。
日期合法性判断不考虑闰年情况,即2月只有28天,出现2月29日情况均认为日期非法。测试用例也不会出现闰年的情况,在此情况下如果考生花时间进行了闰年处理,
并不能带来任何加分,并且由于是自动阅卷,甚至出现扣分。

示例
1) 输入:”511002111222”,函数返回值:1;
2) 输入:”511002abc123456789”,函数返回值:2
3) 输入:”511002198808321234”,函数返回值:4
4) 输入:”511002200102291234”,函数返回值:4
5) 输入:”511002198808081234”,函数返回值:0

题目解析:

本题主要也是涉及字符串的基本操作,以及面向对象的程序设计,因为主要是面向软件开发岗位,所以题目的设置是有一定的层次的,需要测试者熟悉一下基本的C++编程

熟悉基本的对象的设计!同时也要明确解决问题的步骤!下面我的代码,由于没有系统的学习够面向对象的设计和C++,就仅仅是使用类的外壳,外加C++语言,做了一下,希望给位大神,予以设计上的批评与指导!感谢大家不吝赐教!

#include <string>
#include <iostream>

using namespace std;

class CheckID
{
public:
	CheckID(string id) { m_ID = id; }
	~CheckID() { }

public:
	int checkIDLength() 
	{ 
		return ((int)m_ID.length() != 18 ? 1:0) ; 
	}
	int checkIDNormal() 
	{ 
		for(size_t i=0;i<m_ID.length()-1;i++)
			if(m_ID[i] < '0' || m_ID[i] > '9')
				return 2;
		return 0;
	}
	int checkIDFinalChar()
	{
		if(!(m_ID[17] == 'x' || (m_ID[17] <= '9' && m_ID[17] >= '0')))
			return 3;
		return 0;
	}
	int checkIDBirthDay()
	{
		string birthDay = m_ID.substr(10,4);
		int month = 0, day = 0;
		month = atoi(birthDay.substr(0,2).c_str());
		day = atoi(birthDay.substr(2,2).c_str());
		switch(month)
		{
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			if(day > 31 || day < 1)
				return 4;
			else
				break;
		case 4:
		case 6:
		case 9:
		case 11:
			if(day > 30 || day < 1)
				return 4;
			else
				break;
		case 2:
			if(day > 28 || day < 1)
				return 4;
			else
				break;

		}
		return 0;
	}
	int checkID()
	{
		int res = 0;
		res += checkIDLength();
		if(res != 0)
			return res;
		res += checkIDNormal();
		if(res != 0)
			return res;
		res += checkIDFinalChar();
		if(res != 0)
			return res;
		res += checkIDBirthDay();
		if(res != 0)
			return res;
		return res;
	}

private:
	string m_ID;
};


int main()
{
	string id;
	cin >> id;
	CheckID check(id);
	int res = check.checkID();
	cout << res << endl;
}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics