手机号码归属地查询C代码

其实手机号码归属地查询程序比较简单。目前我用的方法是直接查询数据库中的记录。不知道有没有更好的方法。我一直用的是linux系统,所以用的语言也就那么几种。这里我就C语言写个演示的程序,只包含13几的数据库,没有15几的数据库,所以代码中没有考虑那些15几的号码。没有任何技术含量。代码如下。
#include <stdio.h>
#include <string.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
struct telephone_number_info
{
    char *number_tag;
    char *province;
    char *city;
    char *region_number;
    char *type;
};
int get_telephone_number_info( FILE *stream, const char *number,struct telephone_number_info* info)
{
    char number_tag[32];
    char province[64];
    char city[64];
    char type[64];
    char region_number[32];
    char *hdr = NULL;
    char *position;
    struct stat sb;
    int fd;
    /*int flag=0;
    char buffer[128];*/
    fd=fileno(stream);
    fstat(fd,&sb);
    hdr=mmap(NULL,sb.st_size,PROT_READ,MAP_PRIVATE,fd,0);
    if(hdr== MAP_FAILED) /*判断是否映射成功*/
    {
        return 0;
    }
    if((position=strstr(hdr,number))!=NULL)
    {
        bzero(number_tag,32);
        bzero(province,64);
        bzero(city,64);
        bzero(type,64);
        bzero(region_number,32);
        sscanf(position,"%s %s %s %s %s",number_tag,province,city,type,region_number);
        info->number_tag=strdup(number_tag);
        info->province=strdup(province);
        info->city=strdup(city);
        info->region_number=strdup(region_number);
        info->type=strdup(type);
        munmap(hdr,sb.st_size);
        return 1;
    }
    else
    {
        munmap(hdr,sb.st_size);
        return 0;
    }
    /*while((feof(stream)==0)&&(fgets(buffer,128,stream)!=NULL))
    {
        sscanf(buffer,"%s %s %s %s %s",number_tag,province,city,type,region_number);
        if(strcmp(number_tag,number)==0)
        {
            flag=1;
            break;
        }
    }
    if(flag==1)
    {
        info->number_tag=strdup(number_tag);
        info->province=strdup(province);
        info->city=strdup(city);
        info->region_number=strdup(region_number);
        info->type=strdup(type);
    }
    return flag;*/
}

int main(int argc,char *argv[])
{
    FILE *fp;
    char *text_addr=NULL;
    int ret;
    struct telephone_number_info info;
    char telephone_head[8];
    char *telephone_number;
    char filename[]="./telephone.txt";
    char test[32];
    strcpy(test,argv[1]);
    telephone_number=test;
    if(strlen(telephone_number)<7)
    {
        printf("输入错误的手机号码/n");
        return 0;
    }
    else
    {
        strncpy(telephone_head,telephone_number,7);
        telephone_head[7]='/0';
    }
    fp=fopen(filename,"r+");
    if(fp==NULL)
    {
        printf("打开数据库文件失败/n");
        return 0;
    }
    ret=get_telephone_number_info(fp,telephone_head,&info);
    if(ret==1)
    {
        printf("/t手机号码:%s/n/t省份:%s/n/t城市:%s/n/t区号:%s/n/t手机卡类型:%s/n", telephone_number,info.province,info.city,info.region_number,info.type);
    }
    else
    {
        printf("没有找到该号码所在地区/n");
    }
    fclose(fp);
}
需要数据库文件的可以和我联系。也没啥,网上都有,只是txt的比较少。好不容易把xls的转为txt.
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值