最新 手机号段数据库  2020-08-15 458461条记录  号码归属地数据库  全面  准确  规范 
字段包括 省份 城市 运营商 邮编 区号 等信息,对于数据分析、号码归属地查询等非常有帮助

名称:手机号码归属地查询 dat高效率查询  内存优化版
压缩:原版txt为22M,生成这种dat结构为2.66M 
性能:每秒解析300万+号段或者号码,简洁高效 
环境:CPU i7-7700K +内存16GB

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;namespace qqzeng_phone_dat
{public class PhoneSearchFast{private static readonly Lazy<PhoneSearchFast> lazy = new Lazy<PhoneSearchFast>(() => new PhoneSearchFast());public static PhoneSearchFast Instance { get { return lazy.Value; } }private PhoneSearchFast(){LoadDat();Watch();}private string datPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"qqzeng-phone.dat");private DateTime lastRead = DateTime.MinValue;private long[,] prefmap = new long[200, 2];//  000-199private long[,] phonemap;private byte[] data;private long[] phoneArr;private string[] addrArr;private string[] ispArr;/// <summary>/// 初始化二进制dat数据/// </summary>/// <param name="dataPath"></param>/// private void LoadDat(){data = File.ReadAllBytes(datPath);long PrefSize = BytesToLong(data[0], data[1], data[2], data[3]);long RecordSize = BytesToLong(data[4], data[5], data[6], data[7]);long descLength = BytesToLong(data[8], data[9], data[10], data[11]);long ispLength = BytesToLong(data[12], data[13], data[14], data[15]);//内容数组int descOffset = (int)(16 + PrefSize * 9 + RecordSize * 7);string descString = Encoding.UTF8.GetString(data, descOffset, (int)descLength);addrArr = descString.Split('&');//运营商数组int ispOffset = (int)(16 + PrefSize * 9 + RecordSize * 7 + descLength);string ispString = Encoding.UTF8.GetString(data, ispOffset, (int)ispLength);ispArr = ispString.Split('&');//前缀区int m = 0;for (var k = 0; k < PrefSize; k++){int i = k * 9 + 16;int n = data[i];prefmap[n, 0] = BytesToLong(data[i + 1], data[i + 2], data[i + 3], data[i + 4]);prefmap[n, 1] = BytesToLong(data[i + 5], data[i + 6], data[i + 7], data[i + 8]);if (m < n){for (; m < n; m++){prefmap[m, 0] = 0; prefmap[m, 1] = 0;}m++;}else{m++;}}//索引区phoneArr = new long[RecordSize];phonemap = new long[RecordSize, 2];for (int i = 0; i < RecordSize; i++){long p = 16 + PrefSize * 9 + (i * 7);phoneArr[i] = BytesToLong(data[p], data[1 + p], data[2 + p], data[3 + p]);phonemap[i, 0] = data[4 + p] + ((data[5 + p]) << 8);phonemap[i, 1] = data[6 + p];}}private void Watch(){FileInfo fi = new FileInfo(datPath);FileSystemWatcher watcher = new FileSystemWatcher(fi.DirectoryName){IncludeSubdirectories = false,NotifyFilter = NotifyFilters.LastWrite,Filter = "qqzeng-phone.dat",};watcher.Changed += (s, e) =>{var lastWriteTime = File.GetLastWriteTime(datPath);if (lastWriteTime > lastRead){//延时 解决 正由另一进程使用,因此该进程无法访问此文件Thread.Sleep(1000);LoadDat();lastRead = lastWriteTime;}};watcher.EnableRaisingEvents = true;}/// <summary>/// 号段查询/// </summary>/// <param name="phone">7位或者11位</param>/// <returns></returns>public string Query(string phone){long pref;long val = PhoneToInt(phone, out pref);long low = prefmap[pref, 0], high = prefmap[pref, 1];if (high == 0){return "";}long cur = low == high ? low : BinarySearch(low, high, val);if (cur != -1){return addrArr[phonemap[cur, 0]] + "|" + ispArr[phonemap[cur, 1]];}else{return "";}}/// <summary>/// 二分算法/// </summary>private int BinarySearch(long low, long high, long key){if (low > high)return -1;else{long mid = (low + high) / 2;long phoneNum = phoneArr[mid];if (phoneNum == key)return (int)mid;else if (phoneNum > key)return BinarySearch(low, mid - 1, key);elsereturn BinarySearch(mid + 1, high, key);}}private long PhoneToInt(string phone, out long prefix){//最高性能char ch;long currentValue = 0;long prefval = 0;unsafe{fixed (char* name = phone){for (int current = 0; current < 7; current++){ch = name[current];int digitValue = ch - '0';currentValue = (currentValue * 10) + digitValue;if (current == 2){prefval = currentValue;}}}prefix = prefval;return currentValue;}//prefix = Convert.ToUInt32(phone.Substring(0,3));//return Convert.ToUInt32(phone.Substring(0, 7)); ;}/// <summary>/// 字节转整形 小节序 /// </summary>     private uint BytesToLong(byte a, byte b, byte c, byte d){return (uint)(a | (b << 8) | (c << 16) | (d << 24));}}/*(调用例子):    string result = PhoneSearchFast.Instance.Query("号段|号码");--> result="省份|城市|区号|邮编|行政区划代码|运营商"*/
}

更新历史:

2020-08-15 458461条记录
2020-08-01 458084条记录
2020-07-15 458020条记录
2020-07-01 457441条记录
2020-06-01 454802条记录
2020-05-01 450433条记录
2020-04-01 450175条记录
2020-03-01 447897条记录
2020-01-01 442612条记录
2019-12-01 441831条记录
2019-11-01 439265条记录
2019-09-01 438615条记录
2019-08-01 437142条记录
2019-07-01 436804条记录
2019-06-01 430826条记录
2019-05-01 429052条记录
2019-04-01 424014条记录
2019-03-01 423850条记录
2019-02-01 423766条记录
2019-01-01 421973条记录
2018-12-01 415967条记录
2018-11-01 415806条记录
2018-10-01 415311条记录
2018-09-01 413015条记录
2018-08-01 411856条记录
2018-07-01 410765条记录
2018-06-01 405385条记录
2018-05-01 387892条记录
2018-03-01 382140条记录
2018-02-01 381409条记录
2018-01-01 381061条记录
2017-12-01 380357条记录
2017-11-01 369022条记录
2017-10-01 368360条记录
2017-08-01 366454条记录
2017-07-01 363952条记录
2017-06-01 362386条记录
2017-05-01 359938条记录
2017-04-01 359429条记录
2017-03-01 358215条记录
2017-02-01 358006条记录
2017-01-01 357213条记录
2016-12-01 354586条记录
2016-11-01 352898条记录
2016-10-15 352182条记录
2016-09-15 352176条记录
2016-08-15 352069条记录
2016-07-15 344348条记录
2016-06-15 343198条记录
2016-05-15 335588条记录
2016-04-15 335169条记录
2016-03-25 334447条记录
2016-03-01 331878条记录
2016-02-01 329833条记录
2016-01-01 327154条记录
2015-12-01 326601条记录
2015-11-01 326596条记录
2015-10-01 324557条记录
2015-09-01 321602条记录
2015-08-01 320432条记录
2015-07-01 320027条记录
2015-06-01 318201条记录
2015-05-01 318115条记录
2015-04-01 317191条记录
2015-03-01 312145条记录
2015-02-01 311924条记录
2015-01-01 310165条记录
2014-12-01 309966条记录
2014-11-01 309398条记录
2014-10-01 307924条记录
2014-09-01 306093条记录
2014-08-01 301472条记录
2014-07-01 303033条记录
2014-06-01 300635条记录
2014-05-01 299920条记录
2014-04-01 296010条记录
2014-03-01 289087条记录
2014-02-01 288831条记录
2014-01-01 288661条记录
2013-12-01 287379条记录
2013-11-01 286438条记录
2013-10-01 286418条记录
2013-09-01 284304条记录
2013-08-01 282136条记录
2013-07-01 281965条记录
2013-06-03 281413条记录
2013-05-03 281071条记录
2013-04-01 279680条记录
2013-03-01 276893条记录
2013-02-01 275967条记录
2013-01-01 274995条记录
2012-12-01 274832条记录
…………

Excel vlookup  函数  xls 使用

归属地公式:=(VLOOKUP(LEFT(B2,7),号段数据库!B:D,2,0)&VLOOKUP(LEFT(B2,7),号段数据库!B:D,3,0))

运营商公式:=(VLOOKUP(LEFT(A2,3),isp!A:B,2,0))
 运营商公式:=(VLOOKUP(LEFT(B2,7),号段数据库!B:E,4,0))

两个列合并:=CONCATENATE(B1&C1)

开发参考 GitHub  https://github.com/zengzhan/qqzeng-ip

最新手机号段归属地数据库 高性能dat解析相关推荐

  1. 2020最新手机号段归属地数据库 高性能dat解析

    最新 手机号段数据库 2019-12-01 441831条记录 号码归属地数据库 全面 准确 规范 字段包括 省份 城市 运营商 邮编 区号 等信息,对于数据分析.号码归属地查询等非常有帮助 名称:手 ...

  2. [推荐] 最新手机号段归属地数据库(2015年11月) 根据手机号 查询所在地 省份 城市 县城

    统一发txt和xlsx格式  字段tab分隔 最新手机号段归属地数据库(2015年11月) 自行导入 mdb mysql mssql 等 txt导入mysql (  https://github.co ...

  3. 最新手机号段归属地数据库(2017年4月16日版)免费下载

    2017年4月16日版   360569条记录 最新 手机号段数据库 号码归属地数据库  移动号段 联通号段 电信号段 14号段 170号段(虚拟运营商)    权威  全面  准确  规范 字段包括 ...

  4. 最新手机号段归属地数据库 2019年6月版 430826条记录

    2019年6月1日版 430826条记录 最新 手机号段数据库 号码归属地数据库 移动号段 联通号段 电信号段 170 171 号段(虚拟运营商) 权威 全面 准确 规范 字段包括 省份 城市 运营商 ...

  5. mysql手机号段地区库_最新手机号段归属地数据库 2019年12月版 441831条记录

    2019年12月1日版 441831条记录 最新 手机号段数据库 号码归属地数据库 移动号段 联通号段 电信号段 170 171 号段(虚拟运营商) 权威 全面 准确 规范 字段包括 省份 城市 运营 ...

  6. 手机号码段简介以及最新手机号段归属地数据库(2018年7月1日)

    什么是手机号码段? 我国使用的手机号码为11位,其中各段有不同的编码方向:前3位-网络识别号:第4-7位-地区编码:第8-11位-用户号码.号码也就是所谓的MDN号码,即本网移动用户作被叫时,主叫用户 ...

  7. 手机号码段简介以及最新手机号段归属地数据库(2017年6月28日)

    什么是手机号码段? 我国使用的手机号码为11位,其中各段有不同的编码方向:前3位-网络识别号:第4-7位-地区编码:第8-11位-用户号码.号码也就是所谓的MDN号码,即本网移动用户作被叫时,主叫用户 ...

  8. IP地址数据库 | 手机号段归属地数据库 | 行政区划省市区镇村数据库

    2021年4月 最新版 IP地址数据库 (全球版·国内版·国外版·掩码版·英文版) 全球旗舰版 798377行   国内精华版 285113行 演示  https://www.qqzeng.com/i ...

  9. PHP获取手机号归属地,PHP获取2017最新手机号段属地类

     <?php /** php获取手机号段归属地类 2017 @author  sms.cn @link  http://www.sms.cn @date  2017/4/9 */ class ...

  10. 2019-9-2-中国最新手机号段划分情况

    title author date CreateTime categories 中国最新手机号段划分情况 lindexi 2019-09-02 12:57:38 +0800 2019-6-23 10: ...

最新文章

  1. wxWidgets:使用文本模板
  2. docker部署ubuntu并连接ssh远程调试代码
  3. Java基础——构造代码块
  4. pygame.error: video system not initialized的解决办法
  5. RxJS异步编程的简介
  6. WEB服务器Nginx WINDOWS最简部署
  7. 和秋叶一起学PPT之四步走(课时二)
  8. 自然语言处理和python_Python与自然语言处理搭建环境
  9. 【实现】树莓派开机自动向微信发消息报告ip地址(无第三方代理)
  10. 华云数据信创云基座“全芯全栈全生态”能力解读
  11. 计算机网络:速率、带宽、延迟、时延带宽积、丢包率、吞吐量
  12. .NET c#音乐播放器
  13. char to hex
  14. ConvertUtils.register注册转换器
  15. SQLSERVER CDC相关
  16. 伦敦帝国理工学院创业大赛,视网膜诊断术成最大赢家!
  17. [裴礼文数学分析中的典型问题与方法习题参考解答]4.4.6
  18. 可扩展性对英特尔®至强处理器意味着什么
  19. 企业云盘与企业信息安全
  20. 苹果服务器验证码是什么,服务器开发系列--图形验证码到底是怎么回事?

热门文章

  1. pdf pmp书籍第六版_PMP项目管理 第六版 (带目录完整高清版).pdf
  2. PMP更新教材了,怎么备考?
  3. 史上最全jquery视频教程
  4. 快逸报表传递中文参数乱码解决
  5. 遗传算法c语言 x^2,c语言遗传算法 解决 y=x2问题
  6. 绝地求生鼠标宏怎么设置?
  7. 视频教程-R语言数据挖掘-模型评估篇-大数据
  8. C-Free注册码,密钥,到期解决办法
  9. android4.0以上,利用耳机接听键实现自动接听,部分手机失败原因+解决方法(比如华为P7)
  10. 一台显示器分成双屏_华硕显示器贴心相伴:云办公、云学习宅家无忧