手机号码合法性判断

问题描述:
我国大陆运营商的手机号码标准格式为:国家码+手机号码,例如: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时,返回非零值,否则返回零。
附加说明 此为宏定义,非真正函数。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。