Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works
Anything · Lazarus or Delphi
Random projectRandom project

guishudi

输入包含手机号的 CSV/Excel 文件(或直接粘贴号码),根据 phone_location.csv 号段库批量查询每个号码的 归属省、归属市、运营商、邮编,追加到源数据后输出,同时生成 按运营商、按归属省 和 按归属市 的分类统计(数量 + 占比)。 提供两个版本:Python 命令行版 和 Delphi 12 桌面版。

View on GitHub

Member rating

No ratings yet.

Sign in to rate this project.

README

手机号归属地批量查询工具

输入包含手机号的 CSV/Excel 文件(或直接粘贴号码),根据 phone_location.csv 号段库批量查询每个号码的 归属省、归属市、运营商、邮编,追加到源数据后输出,同时生成 按运营商、按归属省 和 按归属市 的分类统计(数量 + 占比)。

提供两个版本:Python 命令行版 和 Delphi 12 桌面版。

目录结构

pascal
guishudi\
????????? 1.txt.csv               ????????????
????????? phone_query.py          Python ?????????????????????
????????? phone_location.csv      ??????????????????????????????????????? 45MB / 67 ???+ ??????
????????? ???????????????.exe           Delphi ????????????????????????????????????????????????????????????
????????? README.md               ???????????????
????????? delphi\                 Delphi 12 (RAD Studio 12) ????????????
    ????????? PhoneQuery.dpr        ???????????????
    ????????? PhoneQuery.dproj      ??????????????????
    ????????? PhoneQuery.res        ??????????????????????????????
    ????????? MainForm.pas / .dfm   ???????????????????????????????????????????????????CSV ??????????????????
    ????????? PasteForm.pas / .dfm  ????????????????????????
    ????????? *.dcu                 ??????????????????????????????

匹配原理

号段库 phone_location.csv 的 phone 列为 7 位号段前缀,取手机号前 7 位做精确匹配:

pascal
id,pref,phone,province,city,isp,isp_type,post_code,city_code,area_code,create_time
1,130,1300000,??????,??????,????????????,2,250000,0531,370100,...

号码清洗规则:去除非数字字符、自动剥离 86 国际前缀;Excel 数字单元格自动还原科学计数法;匹配失败标记为「未知」。

Python 版

文件:phone_query.py

依赖:pandas(读 Excel 需另装 openpyxl)

用法:

powershell
python phone_query.py <输入文件.csv/.xlsx> <号码列名> [-o 输出文件]

python phone_query.py data.xlsx 手机号
python phone_query.py data.csv 电话 -o result.xlsx

输出:

  • 默认生成 原名_已标注.后缀,在源数据后追加 4 列:归属省、归属市、运营商、邮编
  • Excel 输出含 4 个 sheet:明细 / 按运营商统计 / 按归属省统计 / 按归属市统计
  • CSV 输出额外生成 原名_已标注_统计.csv
  • 统计结果同时在控制台打印,CSV 为 UTF-8 带 BOM(Excel 直接打开不乱码)

Delphi 12 版

工程:delphi\PhoneQuery.dpr(VCL 应用,含 MainForm、PasteForm 两个单元)

准备:编译依赖 XLSReadWriteII 6(组件类 TXLSReadWriteII5,单元 XLSReadWriteII5/XLSSheetData5/Xc12Utils5),把其 src 目录加入 IDE 的 Library Path 即可(无需在窗体上放组件,纯代码调用);编译后将 phone_location.csv 放到 exe 同目录,不在时会弹框手动选择,只需选一次。

界面操作:

  1. 浏览... 选择 .csv/.xlsx/.xls 文件 → 载入文件(表头自动填入「号码列」下拉框)
  2. 在下拉框选择号码所在列 → 查询归属地,状态栏显示匹配进度与成功率
  3. 或使用「直接粘贴」:弹窗中每行粘贴一个手机号(不含列名),确定后立即查询
  4. 结果区四个页签均为可见表格:明细(源列+4 列)/ 按运营商统计 / 按归属省统计 / 按归属市统计(后三个均按数量降序,按归属市统计含「归属省、归属市」两列)
  5. 另存CSV / 另存Excel 按当前激活页签导出对应内容,默认文件名分别为 原名_已标注.*、_按运营商统计.*、_按归属省统计.*、_按归属市统计.*;粘贴模式下文件名为 粘贴数据_*.*
  6. 「关于」显示作者信息

说明:

  • Excel 文件读写统一走 XLSReadWriteII 6(TXLSReadWriteII5),不需要安装 Microsoft Excel;.xls 与 .xlsx 用同一套读取代码,由组件按扩展名/文件头自动识别格式(已实测 .xls 读 5 万行无截断,读取无授权水印;.xlsx 读写中文正常)
  • 输入 CSV 编码自动识别:先探测 BOM,无 BOM 时严格校验 UTF-8,否则回退系统 ANSI(GBK)
  • 导出的 CSV 统一为 UTF-8 带 BOM,Excel 直接打开不乱码
  • 另存 Excel 统一输出 .xlsx

作者:老皮 QQ 30922884 [www.2pascal.com github/shirong21cn](http://www.2pascal.com)

数据来源

号段库来自 GitHub 开源项目 ggwork/phone_location,本工具仅使用其中的 phone_location.csv 做离线查询,未对数据做任何修改。数据的准确性、时效性以原项目为准。

这个东西是trae加deepseek弄的,不知道为什么贡献者变成了克劳德。声明下。