最新手机号段归属地数据库 高性能dat解析
最新 手机号段数据库 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解析相关推荐
- 2020最新手机号段归属地数据库 高性能dat解析
最新 手机号段数据库 2019-12-01 441831条记录 号码归属地数据库 全面 准确 规范 字段包括 省份 城市 运营商 邮编 区号 等信息,对于数据分析.号码归属地查询等非常有帮助 名称:手 ...
- [推荐] 最新手机号段归属地数据库(2015年11月) 根据手机号 查询所在地 省份 城市 县城
统一发txt和xlsx格式 字段tab分隔 最新手机号段归属地数据库(2015年11月) 自行导入 mdb mysql mssql 等 txt导入mysql ( https://github.co ...
- 最新手机号段归属地数据库(2017年4月16日版)免费下载
2017年4月16日版 360569条记录 最新 手机号段数据库 号码归属地数据库 移动号段 联通号段 电信号段 14号段 170号段(虚拟运营商) 权威 全面 准确 规范 字段包括 ...
- 最新手机号段归属地数据库 2019年6月版 430826条记录
2019年6月1日版 430826条记录 最新 手机号段数据库 号码归属地数据库 移动号段 联通号段 电信号段 170 171 号段(虚拟运营商) 权威 全面 准确 规范 字段包括 省份 城市 运营商 ...
- mysql手机号段地区库_最新手机号段归属地数据库 2019年12月版 441831条记录
2019年12月1日版 441831条记录 最新 手机号段数据库 号码归属地数据库 移动号段 联通号段 电信号段 170 171 号段(虚拟运营商) 权威 全面 准确 规范 字段包括 省份 城市 运营 ...
- 手机号码段简介以及最新手机号段归属地数据库(2018年7月1日)
什么是手机号码段? 我国使用的手机号码为11位,其中各段有不同的编码方向:前3位-网络识别号:第4-7位-地区编码:第8-11位-用户号码.号码也就是所谓的MDN号码,即本网移动用户作被叫时,主叫用户 ...
- 手机号码段简介以及最新手机号段归属地数据库(2017年6月28日)
什么是手机号码段? 我国使用的手机号码为11位,其中各段有不同的编码方向:前3位-网络识别号:第4-7位-地区编码:第8-11位-用户号码.号码也就是所谓的MDN号码,即本网移动用户作被叫时,主叫用户 ...
- IP地址数据库 | 手机号段归属地数据库 | 行政区划省市区镇村数据库
2021年4月 最新版 IP地址数据库 (全球版·国内版·国外版·掩码版·英文版) 全球旗舰版 798377行 国内精华版 285113行 演示 https://www.qqzeng.com/i ...
- PHP获取手机号归属地,PHP获取2017最新手机号段属地类
<?php /** php获取手机号段归属地类 2017 @author sms.cn @link http://www.sms.cn @date 2017/4/9 */ class ...
- 2019-9-2-中国最新手机号段划分情况
title author date CreateTime categories 中国最新手机号段划分情况 lindexi 2019-09-02 12:57:38 +0800 2019-6-23 10: ...
最新文章
- wxWidgets:使用文本模板
- docker部署ubuntu并连接ssh远程调试代码
- Java基础——构造代码块
- pygame.error: video system not initialized的解决办法
- RxJS异步编程的简介
- WEB服务器Nginx WINDOWS最简部署
- 和秋叶一起学PPT之四步走(课时二)
- 自然语言处理和python_Python与自然语言处理搭建环境
- 【实现】树莓派开机自动向微信发消息报告ip地址(无第三方代理)
- 华云数据信创云基座“全芯全栈全生态”能力解读
- 计算机网络:速率、带宽、延迟、时延带宽积、丢包率、吞吐量
- .NET c#音乐播放器
- char to hex
- ConvertUtils.register注册转换器
- SQLSERVER CDC相关
- 伦敦帝国理工学院创业大赛,视网膜诊断术成最大赢家!
- [裴礼文数学分析中的典型问题与方法习题参考解答]4.4.6
- 可扩展性对英特尔®至强处理器意味着什么
- 企业云盘与企业信息安全
- 苹果服务器验证码是什么,服务器开发系列--图形验证码到底是怎么回事?
热门文章
- pdf pmp书籍第六版_PMP项目管理 第六版 (带目录完整高清版).pdf
- PMP更新教材了,怎么备考?
- 史上最全jquery视频教程
- 快逸报表传递中文参数乱码解决
- 遗传算法c语言 x^2,c语言遗传算法 解决 y=x2问题
- 绝地求生鼠标宏怎么设置?
- 视频教程-R语言数据挖掘-模型评估篇-大数据
- C-Free注册码,密钥,到期解决办法
- android4.0以上,利用耳机接听键实现自动接听,部分手机失败原因+解决方法(比如华为P7)
- 一台显示器分成双屏_华硕显示器贴心相伴:云办公、云学习宅家无忧