手机号码合法性判断

来源:互联网 发布:linux ls 隐藏文件 编辑:程序博客网 时间:2024/06/05 03:13

问题描述:
我国大陆运营商的手机号码标准格式为:国家码+手机号码,例如:8613912345678。特点如下:
1、 长度13位;
2、 以86的国家码打头;
3、 手机号码的每一位都是数字。

请实现手机号码合法性判断的函数(注:考生无需关注手机号码的真实性,也就是说诸如86123123456789这样的手机号码,我们也认为是合法的),要求:
1) 如果手机号码合法,返回0;
2) 如果手机号码长度不合法,返回1
3) 如果手机号码中包含非数字的字符,返回2;
4) 如果手机号码不是以86打头的,返回3;
【注】除成功的情况外,以上其他合法性判断的优先级依次降低。也就是说,如果判断出长度不合法,直接返回1即可,不需要再做其他合法性判断。

要求实现函数:
int verifyMsisdn(char* inMsisdn)
【输入】 char* inMsisdn,表示输入的手机号码字符串。
【输出】 无
【返回】 判断的结果,类型为int。

示例
输入: inMsisdn =“869123456789“
输出: 无
返回: 1
输入: inMsisdn =“88139123456789“
输出: 无
返回: 3
输入: inMsisdn =“86139123456789“
输出: 无
返回: 0

代码如下:自写的

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<ctype.h>//含有isdigit库函数int judge_phonenum(char * str){    int len=strlen(str);    if(len<13)  return 1;//第一判断长度    else    {//第二判断非数字字符        for(int i=0;i<len;i++)        {            int flag=isdigit(str[i]);            if(flag==0) return 2;        }        //第三判断开头是否为86        if(str[0]=='8'&&str[1]=='6') return 0;        else return 3;    }}int main(){    char str[100];    gets(str);    int result=judge_phonenum(str);    printf("%d",result);}

引用了别人的代码

#include <stdio.h>#include <string.h>int verifyMsisdn(char* inMsisdn){    int i,flag1 = 0,flag2 = 0,flag3 = 1;    if(strlen(inMsisdn) == 13)        flag1 = 1;    if(inMsisdn[0] == '8' && inMsisdn[1] == '6')        flag2 = 1;    for(i=0 ; i< strlen(inMsisdn);i++)        if(!(inMsisdn[i]>='0' && inMsisdn[i]<= '9'))            flag3 = 0;    if(flag1 && flag2 && flag3)        return 0;    else if(!flag1)        return 1;    else if(!flag3)        return 2;    else if(!flag2)        return 3;   }int main(){    char inMsisdn[20]={0};    int return_num;    printf("please input the mobile num:\n");    scanf("%s",inMsisdn);    return_num = verifyMsisdn(inMsisdn);    printf("the return num is:%d",return_num);    system("pause");    return 0;}

总结:isdigit库函数
原型:extern int isdigit(char c);
功能:判断字符c是否为数字
说明:当c为数字0-9时,返回非零值,否则返回零。
附加说明 此为宏定义,非真正函数。

0 0
原创粉丝点击