Skip to content

Repository files navigation

中国各类号码本地解读/生成工具(China Code Kit)

English

China Code Kit 是一个隐私优先、可本地运行的中国号码自动识别、解读与规则化生成网站。它覆盖教育、新闻出版、广播电影电视、市场、商务、交通等 17 个业务分类、共 123 个具体号码类型。首页按独立的展示分组组织入口。

项目是可直接发布到 GitHub Pages 根目录的纯静态网站,也可以下载后双击 index.html 离线运行。没有后端、账号、CDN、分析工具、上传功能或外部运行时请求。

主要特性

  • 自动识别号码类型,无需先选择所属类别
  • 首页提供 123 个具体类型的本地工具及简要编码规则;中文电码在同一页面完成解析和生成,其余类型分别提供生成、解析页面
  • 每个类型还提供独立解析页,例如 /read/a1/;首页点击整行或「生成」进入生成器,点击右侧「识别」进入该类型的专属解析页
  • 每个生成器都有稳定、可分享和可直接访问的无后缀地址,例如 /encode/a1/;与解析页一样使用独立页面,本地文件模式也进入各自的文件地址,支持浏览器前进与后退
  • 主页及全部生成、解析页面提供独立描述、绝对 canonical、Open Graph URL 与索引指令;生成页和解析页均直接输出可索引的标题、规则正文与结构化数据,不复用整份首页目录,sitemap.xml 和自动生成的 llms.txt 与号码目录保持同步
  • 生成页要求用户填写或选择所有具有编码意义的字段;仅无直接意义的流水号、序列号等字段由浏览器随机生成
  • 含随机流水字段的类型一次生成 5 个去重结果;没有随机字段的类型按用户填写内容直接给出一个结果
  • 居民身份证、居住证、外国人永久居留身份证、统一社会信用代码、食品生产经营许可证、ISBN、ISSN、专利申请号和 VIN 等会计算有效校验位
  • 同一输入符合多个号码结构时保留全部可能结果,并仅将未通过的结果后置
  • 返回规范写法,并拆分显示号码中的年份、地区、类别、顺序码和校验信息
  • 支持固定电话区号或完整号码,以及移动电话前 3 位、前 7 位或完整 11 位号码;可解读区号地区、HLR 原始规划地区和运营商信息
  • 对办学类型、培养层次、机构类别、食品类别、专利种类、车型年份等有固定含义的代码显示“代码 - 含义”
  • 忽略全角或半角空格、括号及中英文标点,不区分英文字母大小写
  • 号码中的省级中文简称可使用中文全名或省级两字字母码替代,例如 京A·12345 可输入为 bjA·12345;省级别名转换不改写输入,也不显示纠正提示
  • 可直接输入省级行政区名称、全名或中文简称,例如 北京北京市,并按行政区划代码识别和解读
  • 识别过程中始终保留输入框原文,不会自动替换用户输入
  • 机动车号牌支持完整号码或独立号牌字头(如 琼AhiA),按 GA 36—2018 区分普通、新能源、使领馆、港澳入出境、警用、教练、挂车及临时号牌等结构,并兼容四地试用的 2002 式号牌;生成页按省份与号牌分类联动可用发牌机关,号牌序号中的 I/O1/0 识别并明确提示
  • 对具有公开校验算法的号码执行本地校验;其余号码按可确认程度标注“编码结构符合”或“格式符合”
  • 输入、识别和结果只存在于当前页面内存,刷新或关闭页面后不再显示
  • 支持直接双击 index.html,无需安装依赖或启动服务器
  • HTTP(S) 访问把完整压缩样式直接写入 HTML,第一帧无需等待样式请求;JavaScript 使用代码分片,首屏只载入页面壳、目录与路由,识别器在输入框获得操作意图时预热,生成器仅在进入具体类型时载入
  • 预留可一键启用的 cache-mode(PWA、cache-first、站名主动更新与旧缓存回退);开发阶段默认关闭
  • 业务目录统一维护号码定义、识别顺序和文档;首页展示分组单独映射,便于继续扩展

支持范围

业务分类 数量 包含的号码
身份证件 6 居民身份证、港澳居民居住证、台湾居民居住证、外国人永久居留身份证、机动车驾驶证档案编号、中文电码
教育 10 学位证书编号、高等教育学历证书编号、普通高等学校本科专业代码、职业教育专业代码、研究生教育学科专业代码、中小学生学籍号、教师资格证书号码、学校(机构)标识码、学校(机构)人员基础信息代码、普通话水平测试等级证书编号
新闻出版 4 中国标准书号、国际标准书号、国内统一连续出版物号、国际标准连续出版物号
广播电影电视 6 电影剧本(梗概)备案立项号、中外合作摄制电影片备案立项号、电影公映许可证公映号、电影发行经营许可证证号、影片排次号、中外合作摄制电影片许可证号
市场 8 统一社会信用代码、组织机构代码、固定资产投资项目代码、食品生产许可证编号、食品经营许可证编号、仅销售预包装食品备案编号、工业产品生产许可证编号、特种设备代码
商务 9 专利文献号、进口许可证号、出口许可证号、对外劳务合作经营资格证书编号、企业境外投资证书编号、企业境外机构证书编号、进出口货物报关单海关编号、进出口货物报关单预录入编号、商标注册号
人力资源和社会保障 2 外国人社会保障号码、职业技能等级证书编码
文化和旅游 3 旅行社业务经营许可证编号、旅行社分社备案登记证明编号、旅行社服务网点备案登记证明编号
工业和信息化 3 电话号码、无线电发射设备型号核准代码、进网许可标志数字编码
交通 4 机动车号牌号码、汽车识别代号(VIN)、船舶识别号、道路运输证号
财政与金融 9 金融机构编码、代理记账许可证书编号、财政电子票据编码、假币收缴凭证编号、假人民币没收收据编号、货币真伪鉴定申请书编号、货币真伪鉴定书编号、数字化电子发票号码、发票代码
司法 3 人民法院案件案号、公证书编号、法律职业资格证书编号
国土 15 行政区划代码、不动产单元代码、自然资源登记单元代码、勘查许可证证号、采矿许可证证号、排污单位代码、固定污染源代码、生产设施代码、污染治理设施代码、排放口代码、排污许可证编码、放射源编码、取水许可证编号、河道采砂许可证编号、监理工程师(水利工程)注册证书编号
建设 6 建筑工程施工许可证编号、一级建造师注册编号、勘察设计注册工程师注册执业证书证书编号、建筑施工企业安全生产许可证编号、建筑施工特种作业操作资格证书编号、建筑施工企业主要负责人、项目负责人和专职安全生产管理人员安全生产考核合格证书编号
农业 7 农作物种子生产经营许可证编号、农药生产许可证编号、农药经营许可证编号、兽药产品批准文号、拖拉机和联合收割机驾驶证档案编号、有机产品认证证书编号、有机产品认证标志编码
卫生 12 卫生机构(组织)代码、医师资格证书编码、医师执业证书编码、护士执业证书编号、消毒产品生产企业卫生许可证编号、涉及饮用水卫生安全产品卫生许可批件批准文号、药品批准文号、医疗器械注册证编号、第一类医疗器械备案编号、医疗器械生产许可证编号、第一类医疗器械生产备案编号、化妆品生产许可证编号
应急管理 16 安全生产许可证编号、中级注册安全工程师注册证书证书编号、特种作业操作证档案编码、安全生产知识和管理能力考核合格证档案编码、危险化学品经营许可证编号、危险化学品安全使用许可证证书编号、危险化学品登记证编号、烟花爆竹经营(批发)许可证编号、烟花爆竹经营(零售)许可证编号、非药品类易制毒化学品生产许可证编号、非药品类易制毒化学品经营许可证编号、非药品类易制毒化学品生产备案证明编号、非药品类易制毒化学品经营备案证明编号、安全评价机构资质证书证书编号、安全生产检测检验机构资质证书编号、注册消防工程师注册证书注册号

身份证件仍提供更深入的字段解读:

  • 居民身份证及港澳台居民居住证:三级行政区划、出生日期、性别、校验结果
  • 第一代 15 位公民身份号码:区划、出生日期、性别,并明确说明无校验位
  • 外国人永久居留身份证:版本、首次申领地、国籍代码与名称、出生日期、性别和校验结果
  • 中文电码:按中国内地电码表转换多个汉字与四位数字电码,展示逐字对应并可复制电码;本地收录 7078 个汉字,不猜测未收录字符

完整的 123 类名称由 号码目录 维护,号码规范和资料来源见 编码规则与参考资料

使用方式

直接打开

下载或克隆仓库后,直接双击根目录的 index.html。识别逻辑和内置代码表均包含在本地文件中,不需要服务器或网络。

浏览器不允许 file:// 页面注册 Service Worker;这不影响号码识别、生成和本地使用。项目开发阶段同时关闭了在线页面的 cache-mode

使用本地静态服务器

在项目根目录运行:

python3 -m http.server 4173

然后访问 http://localhost:4173/

部署到 GitHub Pages

  1. 将仓库内容提交到 main 分支。
  2. 在仓库的 Settings → Pages 中选择 Deploy from a branch
  3. 选择 main 分支和 / (root) 目录并保存。

网站按 GitHub Pages 发布源根目录部署,并通过根目录 CNAME 使用 id.songming.org。无需 GitHub Actions。

路由行为:

  • / 是唯一主页地址
  • /index/index//index.html 会规范跳转到 /
  • 122 个独立生成器使用 /encode/{永久编号}/ 地址;目录中的 index.html 只是 GitHub Pages 的静态实现细节,不会出现在站内链接、规范地址或站点地图中
  • 123 个专属解析页使用 /read/{同一永久编号}/;例如 /encode/a2//read/a2/ 均对应港澳居民居住证。中文电码仅使用 /read/a7/,在同一页面解析、生成;旧生成地址已取消,按普通无效地址处理
  • 生成和解析均使用独立静态页面,直接打开、刷新、分享以及浏览器前进后退均对应同一类型;本地文件模式打开对应的 encode/{永久编号}/index.htmlread/{永久编号}/index.html,线上仍使用无显性文件名的目录地址
  • 根目录 sitemap.xml 列出主页及全部生成、解析页的 246 个规范地址;解析页只处理对应类型,无法匹配时可返回主页使用多类型自动识别
  • 根目录 llms.txt 按业务分类列出全部生成器、解析页及项目文档,供支持该约定的语言模型与智能代理定位内容
  • 其他不存在的页面由根目录 404.html 返回;GitHub Pages 保留 HTTP 404 状态,页面同时包含 noindex 元数据
  • Service Worker 不再把未知导航请求改写为主页;离线状态下也使用带 404 状态的本地错误页

如何理解识别结果

结果状态分为三种:

  • 编码结构与校验通过:号码满足结构,并通过公开校验算法;仍不能证明证照真实或有效
  • 编码结构符合:固定位置、年份、类别等结构约束符合,但没有可用于离线核真的公开数据库
  • 编码结构未通过 / 无法识别:关键年份、代码、校验位或字符结构不符合当前规则

一些纯数字号码在不同部门使用相同长度和相似结构。遇到这种情况,页面会显示全部可能类型;只有未通过的结果会被后置,不会擅自只保留一个结论。

号码生成

展开首页任一大类并点击具体号码类型,即可进入对应生成页。生成过程不读取识别输入框,也不会改写输入框原文:

  • 页面首先简要说明该号码的字段组成和校验规则
  • 行政区划使用省级、地级、县级联动选择;年份、日期、性别、机构、证书类别、业务类别、学校、专业、国籍等有意义字段均由用户填写或选择
  • 只有规则明确属于流水号、顺序号、随机序列等且不直接表达具体含义的字段才会随机生成
  • 存在随机流水字段时,浏览器一次生成 5 个互不重复的结果,可继续点击“重新随机流水号”
  • 不存在随机字段时,根据用户填写内容直接显示一个结果
  • 对具有公开校验算法的号码计算真实校验位;其余类型按当前项目已实现的公开结构生成
  • 每个结果可单独复制,file:// 双击模式也提供剪贴板后备方式

生成结果只表示字符结构和公开校验关系自洽,不代表号码已由主管机关签发、登记或分配。随机结果可能与真实号码巧合,请勿用于冒用、欺骗或替代正式业务系统。

隐私与本地运行设计

号码归一化、类型识别、字段解读和校验全部在浏览器页面内完成。项目不会把输入写入 Cookie、Local Storage、IndexedDB 或缓存,也不会发送到服务器。

行政区划的轻量省级索引在首屏完成后通过 requestIdleCallback 初始化,并提供 setTimeout 回退;地、县级记录按数字代码首位 1–6 分片,在识别相关号码或生成器切换省份时按需载入,港澳台使用内置直接路由。国别代码、学校名录、本科与职业教育专业目录、研究生学科专业目录、影片排次号代码、人民法院代字、电话号码归属数据,以及机动车发牌机关、行业分类等专业代码表仅在识别相关号码或打开对应生成页时按需初始化。固定电话区号按中心局拆为 7 个分片,上海、天津、重庆和广州使用内置直接路由;移动电话先读取轻量的三位网号索引,再按命中网号及 HLR 首位数字只初始化一个哈希分片。移动号码生成器可按省级行政区、城市和完整 HLR 识别号三级筛选,也可手动填写四位 HLR 并主动查询原始规划归属地。HLR 结果只表示号码原始规划归属,不把携号转网后的运营商当成可由号码确定的信息。院校名录通常按省级数字代码首位分片,院校较多的江苏、山东、河南、湖南、广东和四川按省级代码单列;北京市归入首位数字 1 的普通分片。5 位学校国标代码先读取小型路由表,再只初始化对应分片。本科专业目录的工学门类和职业教育目录的工科专业大类也使用独立分片。法院名录按 31 个省级单位分别路由,最高人民法院、新疆生产建设兵团和军事法院各用独立分片;输入案号或选择法院时只会初始化对应分片。所有代码表都随仓库发布,运行时不会访问资料来源网站。

生成页面的字段、普通选项和数据库字段的真实默认值在构建时直接写入 HTML,样式内联,打开即可看到完整表单。脚本接管时保留已填写内容和焦点,不替换整张表单;数据库选项只为当前可见分支补全,隐藏分支等用户切换后再初始化。每个页面只加载对应号码类型的生成规则,不下载全部类型的表单定义。单个菜单载入失败时可单独重试,其余字段仍可填写。

在线页面使用压缩生产模块,构建保留上一代在线分片,避免发布切换造成旧入口失效。本地双击模式使用精简的经典脚本启动包,数据库通过同样的切片边界从 assets/file-data/ 按需读取,无需服务器;这些文件与 assets/app/generators/ 下的类型模块均由构建生成,发布时需要完整保留。行政区划省级索引继续在首屏完成后空闲初始化,真实用户操作不会等待空闲回调。所有加载均为同源或本地项目文件,不访问外部数据服务。

项目把 PWA、Service Worker、cache-first、点击顶部站名主动更新缓存及旧缓存回退的组合能力统一称为 cache-mode。当前开发版本将其关闭:不注册 Service Worker、不挂载 Web App Manifest、站名不可触发更新,并会注销本项目既有 Service Worker、清理旧静态缓存;即使浏览器仍在更新旧 Worker,新版 Worker 也会跳过预缓存并自行注销,避免后台下载生成页。网站按普通静态网页方式运行。

保留的 cache-mode 接口启用后使用以下策略:

  • 普通启动优先读取当前离线缓存
  • 点击页面顶部站名返回主页;仅双击站名时主动检查同源静态资源更新
  • 新版本全部写入成功后才切换活动缓存
  • 更新失败时继续使用原缓存
  • 更新成功后保留上一版缓存作为回退

项目结构

.
├── index.html                 # GitHub Pages 主页与本地文件入口
├── README.md                  # 简体中文项目说明
├── README_en.md               # 面向英文读者的项目说明
├── index/
│   └── index.html             # /index 规范跳转入口
├── encode/                    # 122 个可直达生成器的静态无后缀路由
├── read/                      # 123 个独立解析页,含静态规则正文及专属输入
├── robots.txt                 # 搜索引擎抓取与站点地图入口
├── sitemap.xml                # 主页与全部生成、解析页规范地址
├── llms.txt                   # 面向语言模型的站点说明与完整目录
├── 404.html                   # GitHub Pages 自定义 404 页面
├── sw.js                      # 根作用域 Service Worker 与导航状态处理
├── assets/
│   ├── app/
│   │   ├── core/
│   │   │   ├── catalog.js    # 123 类号码的目录、排序与永久路由
│   │   │   ├── generator-forms.js # 生成表单字段、选项与字段组合规则
│   │   │   ├── generators.js # 123 类号码的生成规则与校验位计算
│   │   │   ├── registry.js   # 通用号码规则注册表(特殊名称)
│   │   │   ├── interpreter.js # 多识别器编排与结果排序
│   │   │   └── ...           # 身份证件与通用校验模块
│   │   ├── data-service.js    # idle / on-demand 数据初始化
│   │   ├── lazy-data-service.js # 首屏之外的数据服务载入边界
│   │   ├── canonical-entry.js # /index.html 主页地址规范化
│   │   ├── main.js
│   │   ├── web/               # 在线压缩入口、代码分片及上一代兼容分片
│   │   ├── file-shell.js      # 双击运行的轻量启动层
│   │   ├── file-shell-bundle.js # 轻量启动层构建产物
│   │   └── file-bundle.js     # 首次实际操作后载入的完整本地运行时
│   ├── data/                  # 行政区划、国别、电话、法院与专业代码表
│   ├── icons/                 # PWA 与 favicon 图标
│   ├── styles.css             # 唯一深色主题
│   ├── manifest.webmanifest
│   ├── asset-manifest.json
│   └── REFERENCES.md
└── development/
    ├── scripts/
    ├── test/
    ├── package.json
    └── tsconfig*.json

根目录只保留 GitHub Pages 必需入口、项目说明和分类目录;开发依赖、测试和构建脚本统一放在 development/

开发与校验

开发环境需要 Node.js 22 或更高版本:

cd development
npm install
npm run check
命令 用途
npm run build 内联压缩样式,生成在线分片、本地文件启动层与完整运行时、PWA 图标和资源版本清单
npm run typecheck 检查浏览器代码和 Service Worker 类型
npm test 运行有效、无效、校验算法、误判防护、文件模式和界面回归测试
npm run check 依次执行类型检查、构建和全部测试

assets/app/file-shell-bundle.jsassets/app/file-bundle.js 必须随网站发布:双击 index.html 时先载入轻量启动层,在第一次识别或打开生成器时再载入完整本地运行时。HTTP(S) 模式从 HTML 内联样式直接完成首帧,再使用 assets/app/web/ 中经过压缩和代码分割的生产构建;源模块继续保留用于类型检查、维护与本地构建。

扩展新号码类型

  1. assets/app/core/catalog.js 的相应大类中追加类型。
  2. assets/app/core/registry.js 注册结构、标准化写法和解读字段;复杂类型可建立独立模块。
  3. assets/app/core/generators.js 注册生成方法与面向用户的简要编码规则。
  4. 如需较大代码表,将数据放入 assets/data/,通过 data-service.js 动态导入,不要加入首屏同步初始化。
  5. 添加有效、无效、相似格式误判、多匹配排序和生成结果回读测试。
  6. 将新增运行时文件加入 development/scripts/build.mjs 的离线资源清单并重新构建。

首页计数和分类内容会自动从目录同步,不需要在界面代码中重复维护。

使用限制

本工具只依据公开编码规则进行离线识别。即使显示“校验通过”,也不能证明号码由主管机关签发、当前有效、对应真实主体,或输入者有权使用。涉及业务办理时,请使用主管机关认可的查询或核验渠道。

About

A website for locally decoding and generating 120+ types of Chinese identifiers, codes, and numbers.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages