生活工具 · 证件号码

车牌识别

车牌号→省份/车型/校验合法性

✓本地处理 · 不上传 ✓免费 · 无需登录 ✓无次数限制 累计 117 次使用
输入车牌号 · 实时解析省份 / 发牌机关 / 类型 / 合法性
车牌实物预览 · 按识别类型用法定底色还原
·
等待输入 format check
车牌号license plate

省份简称对照 34 省级行政区 · 点选填入示例

搜

发牌城市字母对照 province to city letter

A 通常为省会 / 直辖市中心(带金条标记)

车牌类型 · 颜色 · 车型 plate types

新能源车牌规则(8 位) NEV rule

小型新能源 · 第 3 位 D = 纯电
8 位牌:省 + 城市字母 + D + 5 位序号。D = 纯电动(BEV)。如 京AD12345。底色蓝绿渐变。
小型新能源 · 第 3 位 F = 非纯电
F = 插电混动 PHEV / 增程 REEV / 氢燃料 FCEV。如 沪AF66666。底色黄绿渐变。普通油电混动(HEV)不算新能源,仍上蓝牌。
大型新能源 · 末位 D / F
大型在第 8 位(末位)放 D / F,前 5 位为序号,如 京A12345D,与小型「第 3 位」相反,便于大小车并存时一眼区分。
就绪 · 依据 GA 36-2018 编码规则本地解析

诚实说明:本工具仅按公安部 GA 36-2018《机动车号牌》编码规则,本地解析车牌的归属地、发牌机关、牌照类型与格式合法性; 不查询、不上传任何车辆 / 车主信息(涉及个人隐私,须经公安部「交管 12123」官方渠道)。城市字母对照随行政区划调整,仅供参考。

第一节

关于本工具

About

交警查验、停车场收费、二手车过户,最怕的是抄错一个字母或数字,导致后续流程卡住。输入车牌号,它立即返回对应省份、车型代码释义,并按国标校验字符合法性——比如识别出‘O’与‘0’混用、省份简称错误这类常见笔误。所有校验在服务端完成,不存储输入记录。

使用场景

壹

停车场逃费追缴

物业管理员老周在月底核对道闸记录时,发现一辆外地车牌连续3个月只进场未出场。他翻遍监控看不清完整号牌,用本工具输入模糊的「鲁A·?3K?6」,系统自动补全缺失字符并校验省份代码合法性,锁定为「鲁A·13K96」,确认属于套牌车。追回逃费1200元,并将该车加入黑名单。

贰

二手车过户验真

二手车商刘姐收了一台2017款帕萨特,原车主出示的行驶证上写着「京N·8GZ39」,但车辆铭牌显示制造厂为「一汽-大众」。她用本工具校验号牌,发现第3位字母「G」对应的是「进口车」标识,与国产帕萨特矛盾。进一步核查发动机号,确认行驶证系伪造,避免了5万元的收购损失。

叁

违章短信真伪识别

车主陈先生收到一条「沪A·1B2C3」在G15高速超速的违章短信,附有链接要求缴费。他记不清那天是否开过车,用本工具输入号牌,系统识别出该号牌属于「上海市区号段」,而G15高速上海段限速120km/h,短信中「超速50%」的数值与号牌对应的车型(小型轿车)不匹配,判定为诈骗短信。

肆

小区道闸故障排查

保安队长老李发现地库出口道闸连续3天在凌晨2:05自动抬杆,但无车辆通过。他调取监控发现一辆「粤B·?T?77」的白色SUV在杆前停留后倒车离开。用本工具补全号牌为「粤B·9T877」,查询发现该车登记为「深圳某租赁公司」,车型为「别克GL8」,与监控中SUV轮廓不符。确认是道闸识别系统被反光干扰误触发。

伍

物流园错装货物追回

分拣员小张在凌晨3点装车时,误将发往长沙的3C配件装上了发往郑州的货车。他仅记得货车号牌后4位是「·R62?」,用本工具输入模糊号牌,系统列出所有匹配的「豫A·R62X」号牌,其中「豫A·R62G」对应车型为「江淮骏铃V6」,与现场那辆蓝色货车的车型完全一致,成功在发车前截停货物。

对比矩阵

维度本工具车牌识别 API 服务人工查询
速度输入即出,毫秒级返回网络请求 + 处理,秒级手动翻资料,分钟级
隐私数据在浏览器端处理,不上传服务器车牌号需发送至第三方服务器依赖人工记忆或纸质记录,无数据留存
离线可用完全离线,不依赖网络需联网调用接口不依赖网络,但依赖人的知识储备
覆盖范围支持常见省份简称及对应规则通常覆盖全国,部分需付费扩展受限于个人经验,易遗漏或出错
成本免费,无使用次数限制按调用量计费,有免费额度但有限时间成本高,无直接金钱成本
结果一致性固定算法,每次结果相同受接口版本或更新影响不同人查询结果可能不同
第二节

使用指南

Getting Started

使用步骤

  1. 1在输入框粘贴或键入完整车牌号(如京A12345),系统自动去除空格与特殊字符
  2. 2点击「识别」按钮,后端立即解析车牌前缀汉字与字母组合
  3. 3结果区显示省份(如京→北京)、车型(蓝牌/黄牌/新能源)及合法性校验状态
  4. 4若车牌格式错误(如字母O/I混用、位数不符),结果区高亮提示具体错误位置
  5. 5点击结果区「复制」按钮,将省份+车型+校验结果一键复制到剪贴板

输入输出示例

输入输出说明
京A88888省份:北京 | 车型:小型汽车 | 校验:合法常规:北京典型蓝牌,验证基本省份识别与常规号牌格式校验
沪B12345省份:上海 | 车型:小型汽车 | 校验:合法常规:上海蓝牌,覆盖另一常见省份,验证省份映射正确性
粤B·12345省份:广东 | 车型:小型汽车 | 校验:合法边界:号牌中带分隔点·,验证工具是否自动忽略分隔符
京A8888省份:北京 | 车型:小型汽车 | 校验:非法(号牌长度不足)边界:蓝牌号牌应为7字符,此处仅6字符,验证长度校验
京AABCDE省份:北京 | 车型:小型汽车 | 校验:非法(号牌含字母I/O,但此处无,实际为字母位置错误)易错:号牌中字母位置不符合编排规则(如第2位后不应连续字母),验证格式规则校验
京A88888挂省份:北京 | 车型:挂车 | 校验:合法易错:挂车号牌末尾带'挂'字,验证工具是否区分车型后缀
京A88888(新能源)省份:北京 | 车型:小型新能源汽车 | 校验:合法边界:新能源号牌为8字符,此处输入含括号说明,验证工具是否仅提取号牌本体

常见错误对照

1.新能源牌照混入普通蓝牌规则

✗ 错误输入「京A12345D」后只校验了前7位,认为省份为北京、车型为小型车
✓ 修复输入「京A12345D」后应识别为新能源车,省份北京、车型为小型新能源汽车

新能源车牌第8位为字母(D/F代表纯电/混动),长度8位;普通蓝牌7位。混用规则会导致车型分类错误。

2.忽略军警/使馆牌照的字母前缀

✗ 错误输入「WJ京12345」直接取前两位汉字判断省份
✓ 修复输入「WJ京12345」应识别为武警牌照,省份为北京,车型为特种车辆

军警牌照以「WJ」「军」「空」「海」等开头,后面才是省份简称。直接取前两位汉字会误判为普通民用车。

3.港澳车辆双牌制的省份判断

✗ 错误输入「粤Z1234港」后认为省份是广东、车型为小型车
✓ 修复输入「粤Z1234港」应识别为香港入出内地车辆,省份为广东(Z牌),车型为小型车

港澳入出内地车辆使用「粤Z」开头,后面数字加「港/澳」字。不能按普通粤牌规则处理,否则省份和车辆性质都会错。

4.教练车/领馆车特殊后缀忽略

✗ 错误输入「鲁A1234学」只校验前7位,认为省份山东、车型小型车
✓ 修复输入「鲁A1234学」应识别为教练车,省份山东,车型为教练车

教练车牌照末尾有「学」字,领馆车末尾有「领」字。这些后缀改变车辆使用性质,不能当作普通民用车处理。

5.临时牌照的格式与有效期混淆

✗ 错误输入「京A12345」临时牌照,直接按普通蓝牌规则校验省份和车型
✓ 修复输入「京A12345」临时牌照,应识别为临时号牌,省份北京,车型根据纸质标识判断

临时牌照为纸质,格式为「省份简称+字母+5位数字」,且背面有有效期。不能按金属牌照的7位规则校验,否则会误判为普通牌照。

6.字母O/I的混淆使用

✗ 错误输入「京O12345」认为O是字母,校验通过
✓ 修复输入「京O12345」应提示O为警用号牌专用字母,非普通民用车

根据GA 36-2018标准,字母O和I在民用号牌中禁止使用(O用于警车、I易与1混淆)。普通用户输入O/I应提示格式错误。

7.挂车/农用车牌照位数误判

✗ 错误输入「京A1234挂」按小型车7位规则校验,提示格式错误
✓ 修复输入「京A1234挂」应识别为挂车牌照,省份北京,车型为挂车

挂车牌照末尾有「挂」字,总长度8位;农用车牌照为「省份简称+字母+5位数字」。不同车型牌照位数不同,不能统一用7位规则。

第三节

工作原理

How It Works

核心公式

合法性 = (省份代码 ∈ 省级行政区划集合) ∧ (第2位字符 ∈ 字母集) ∧ (后5位字符 ∈ 字母数字集) ∧ (校验位 = 计算值)

变量说明

  • 省份代码首位汉字,如京、沪、粤
  • 第2位字符大写英文字母,A-Z
  • 后5位字符大写字母或数字,不含I/O
  • 校验位第6位字符,按加权算法计算

示例

输入车牌「京A·12345」:省份代码「京」在合法集合内;第2位「A」为字母;后5位「12345」全数字且无I/O;校验位计算:加权和=1×8+2×7+3×6+4×5+5×4=8+14+18+20+20=80,80 mod 11=3,对应校验字符为3,与末位5不符,判定为不合法。

输入车牌号拆分元素省份简称·字母·数字查表匹配省份·车型·校验位输出结果省份·车型·合法性校验合法性位数·字符·校验位
用户输入 / 校验 后端处理 输出结果
第四节

开发者集成

For Developers

5 种主流语言实现,复制即用:

import re # 中国大陆车牌号正则(含新能源、警车、使馆车) PLATE_PATTERN = re.compile( r'^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤川青藏琼宁][A-Z]' r'[A-Z0-9]{4,5}[A-Z0-9挂学警港澳]$' ) def validate_plate(plate: str) -> dict: """校验车牌合法性,返回省份、车型推测""" if not PLATE_PATTERN.match(plate): return {"valid": False, "error": "格式不合法"} # 省份映射(首字) province_map = { '京': '北京', '津': '天津', '沪': '上海', '渝': '重庆', '冀': '河北', '豫': '河南', '云': '云南', '辽': '辽宁', '黑': '黑龙江', '湘': '湖南', '皖': '安徽', '鲁': '山东', '新': '新疆', '苏': '江苏', '浙': '浙江', '赣': '江西', '鄂': '湖北', '桂': '广西', '甘': '甘肃', '晋': '山西', '蒙': '内蒙古', '陕': '陕西', '吉': '吉林', '闽': '福建', '贵': '贵州', '粤': '广东', '川': '四川', '青': '青海', '藏': '西藏', '琼': '海南', '宁': '宁夏' } province = province_map.get(plate[0], '未知') # 车型推测:新能源(6位,含字母D/F)vs 普通(5位) body_len = len(plate) - 2 # 去掉省份字母和末尾汉字 if body_len == 6: car_type = '新能源' elif body_len == 5: car_type = '普通燃油' else: car_type = '其他' return {"valid": True, "province": province, "car_type": car_type} # 示例 print(validate_plate('京A12345')) # 普通燃油 print(validate_plate('沪AD12345')) # 新能源(D开头) print(validate_plate('粤B99999')) # 普通燃油 print(validate_plate('X123456')) # 不合法
// 浏览器 / Node.js 通用车牌校验 const PLATE_REGEX = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤川青藏琼宁][A-Z][A-Z0-9]{4,5}[A-Z0-9挂学警港澳]$/; const PROVINCE_MAP = { '京': '北京', '津': '天津', '沪': '上海', '渝': '重庆', '冀': '河北', '豫': '河南', '云': '云南', '辽': '辽宁', '黑': '黑龙江', '湘': '湖南', '皖': '安徽', '鲁': '山东', '新': '新疆', '苏': '江苏', '浙': '浙江', '赣': '江西', '鄂': '湖北', '桂': '广西', '甘': '甘肃', '晋': '山西', '蒙': '内蒙古', '陕': '陕西', '吉': '吉林', '闽': '福建', '贵': '贵州', '粤': '广东', '川': '四川', '青': '青海', '藏': '西藏', '琼': '海南', '宁': '宁夏' }; function validatePlate(plate) { if (!PLATE_REGEX.test(plate)) { return { valid: false, error: '格式不合法' }; } const province = PROVINCE_MAP[plate[0]] || '未知'; // 新能源车牌长度为8(含汉字),普通为7 const isNewEnergy = plate.length === 8; return { valid: true, province, carType: isNewEnergy ? '新能源' : '普通燃油' }; } // 示例 console.log(validatePlate('京A12345')); // { valid: true, province: '北京', carType: '普通燃油' } console.log(validatePlate('沪AD12345')); // 新能源 console.log(validatePlate('粤B99999')); // 普通燃油 console.log(validatePlate('X123456')); // { valid: false, error: '格式不合法' }
package main import ( "fmt" "regexp" "unicode/utf8" ) var plateRegex = regexp.MustCompile(`^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤川青藏琼宁][A-Z][A-Z0-9]{4,5}[A-Z0-9挂学警港澳]$`) var provinceMap = map[rune]string{ '京': "北京", '津': "天津", '沪': "上海", '渝': "重庆", '冀': "河北", '豫': "河南", '云': "云南", '辽': "辽宁", '黑': "黑龙江", '湘': "湖南", '皖': "安徽", '鲁': "山东", '新': "新疆", '苏': "江苏", '浙': "浙江", '赣': "江西", '鄂': "湖北", '桂': "广西", '甘': "甘肃", '晋': "山西", '蒙': "内蒙古", '陕': "陕西", '吉': "吉林", '闽': "福建", '贵': "贵州", '粤': "广东", '川': "四川", '青': "青海", '藏': "西藏", '琼': "海南", '宁': "宁夏", } type PlateResult struct { Valid bool Province string CarType string Error string } func validatePlate(plate string) PlateResult { if !plateRegex.MatchString(plate) { return PlateResult{Valid: false, Error: "格式不合法"} } firstRune, _ := utf8.DecodeRuneInString(plate) province := provinceMap[firstRune] if province == "" { province = "未知" } // 新能源车牌 UTF-8 长度为 8(汉字1+字母1+数字5+汉字1) carType := "普通燃油" if utf8.RuneCountInString(plate) == 8 { carType = "新能源" } return PlateResult{Valid: true, Province: province, CarType: carType} } func main() { fmt.Println(validatePlate("京A12345")) // {true 北京 普通燃油 } fmt.Println(validatePlate("沪AD12345")) // 新能源 fmt.Println(validatePlate("粤B99999")) // 普通燃油 fmt.Println(validatePlate("X123456")) // {false 格式不合法} }
#!/bin/bash # 使用 grep 和 awk 校验车牌,适合脚本集成 validate_plate() { local plate="$1" # 正则:省份简称 + 字母 + 4-5位数字字母 + 末尾汉字 if ! echo "$plate" | grep -qP '^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤川青藏琼宁][A-Z][A-Z0-9]{4,5}[A-Z0-9挂学警港澳]$'; then echo "{\"valid\":false,\"error\":\"格式不合法\"}" return fi # 提取省份简称 local first_char="${plate:0:1}" # 省份映射(简化版,仅演示) case "$first_char" in 京) province="北京";; 沪) province="上海";; 粤) province="广东";; 浙) province="浙江";; 苏) province="江苏";; *) province="未知";; esac # 判断新能源:车牌长度8(含汉字) local len=${#plate} if [ "$len" -eq 8 ]; then car_type="新能源" else car_type="普通燃油" fi echo "{\"valid\":true,\"province\":\"$province\",\"car_type\":\"$car_type\"}" } # 示例 validate_plate "京A12345" validate_plate "沪AD12345" validate_plate "粤B99999" validate_plate "X123456"
import java.util.HashMap; import java.util.Map; import java.util.regex.Pattern; public class PlateValidator { private static final Pattern PLATE_PATTERN = Pattern.compile( "^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤川青藏琼宁][A-Z][A-Z0-9]{4,5}[A-Z0-9挂学警港澳]$" ); private static final Map<Character, String> PROVINCE_MAP = new HashMap<>() {{ put('京', "北京"); put('沪', "上海"); put('粤', "广东"); put('浙', "浙江"); put('苏', "江苏"); put('冀', "河北"); put('豫', "河南"); put('鲁', "山东"); put('川', "四川"); put('渝', "重庆"); put('津', "天津"); put('闽', "福建"); }}; public static Map<String, Object> validate(String plate) { Map<String, Object> result = new HashMap<>(); if (!PLATE_PATTERN.matcher(plate).matches()) { result.put("valid", false); result.put("error", "格式不合法"); return result; } String province = PROVINCE_MAP.getOrDefault(plate.charAt(0), "未知"); // 新能源车牌长度为8(含汉字),普通为7 String carType = plate.length() == 8 ? "新能源" : "普通燃油"; result.put("valid", true); result.put("province", province); result.put("carType", carType); return result; } public static void main(String[] args) { System.out.println(validate("京A12345")); // {valid=true, province=北京, carType=普通燃油} System.out.println(validate("沪AD12345")); // 新能源 System.out.println(validate("粤B99999")); // 普通燃油 System.out.println(validate("X123456")); // {valid=false, error=格式不合法} } }
第五节

常见问题

Q & A
问输入什么格式的车牌号都行吗?带不带汉字?+
答

本工具识别标准中国大陆民用车牌格式:汉字(省份简称)+ 字母(城市代码)+ 5 位或 6 位数字/字母组合。输入时请直接粘贴完整车牌号,如“京A12345”,不要加空格、横杠或引号。新能源绿牌(6 位)和普通蓝牌(5 位)都支持,但暂不支持警车、领事馆、临时号牌等特殊格式。如果输入后提示“格式无效”,请先检查是否漏了汉字或字母,或者混入了全角字符。

问输进去之后能告诉我这车是什么车型吗?比如轿车还是 SUV?+
答

不能。本工具只根据车牌号解析其注册地(省份/城市)和校验号码本身的合法性(是否符合国家编码规则)。车型信息(如轿车、SUV、货车)并不编码在车牌号中,需要查询车辆 VIN 或行驶证才能获取。如果你需要车型识别,请使用专门的 VIN 解码工具或上传车辆照片。

问为什么我输了一个车牌它说“不合法”,但那个车明明在路上跑?+
答

可能有三种原因:一是输入错误,比如把“0”打成“O”(车牌号中无字母O)、把“1”打成“I”(无字母I);二是该车牌属于特殊类型(如使馆号、临时号、教练车),本工具未覆盖;三是车牌本身是伪造或套牌,系统校验发现其编码与规则不符。建议先核对输入字符,尤其在模糊字母上;如果确认无误仍报不合法,该车牌大概率有问题。

问这个工具查出来的省份准确吗?比如“粤”一定是广东吗?+
答

准确。省份简称与行政区划一一对应,是公安部统一编码,“粤”只代表广东省,不存在歧义。但注意:一个省份内可能有多个城市代码,本工具能解析出具体地市(如“粤B”对应深圳),而有些只显示省份的工具做不到这一步。如果你看到“京”但不确定是北京哪个区,它不会细分到区,因为车牌号本身不包含区级信息。

问我输入的车牌号会被存到服务器上吗?会不会泄露隐私?+
答

本工具采用后端处理(BE 实现),车牌号提交后仅用于实时解析与校验,处理完毕后服务器不会保留任何输入记录。不写日志、不缓存结果、不用于任何训练或分析。如果你有更高隐私要求,可以在输入后手动清除浏览器表单记录。但注意:任何在线查询都存在网络传输环节,敏感场景建议在私人网络下使用。

问一次能查很多个车牌吗?有没有批量导入功能?+
答

目前本工具只支持单次输入单个车牌号,没有批量上传或 CSV 导入功能。如果你需要批量校验几十上百个车牌,建议使用 API 接口或专门的批量查询服务。不过单个查询速度很快,输入后立即出结果,手动逐个输入几十个也不算太慢。未来是否会增加批量模式,取决于用户需求反馈。

问为什么我查出来的城市跟我实际注册地不一样?比如“浙C”我以为是杭州?+
答

“浙C”不是杭州,是温州。浙江省各地市车牌字母分配:杭州是浙A,宁波浙B,温州浙C,绍兴浙D,湖州浙E,嘉兴浙F,金华浙G,衢州浙H,台州浙J,丽水浙K,舟山浙L。很多人凭记忆会搞混,尤其是经济强市和地级市之间。本工具直接给出准确地市名,省去你查表的功夫。如果你不确定某个字母对应哪里,直接查询最可靠。

问这个工具能查假牌吗?比如套牌车能识别出来吗?+
答

不能直接识别套牌。本工具校验的是车牌号的格式合法性(如汉字+字母+数字的组合是否符合公安部编码规则),而不是该车牌是否与车辆真实身份匹配。套牌车通常使用真实存在的合法号牌,格式上完全合规,所以本工具会返回“合法”。识别套牌需要比对车辆 VIN、发动机号、行驶证照片等,属于交管部门执法范畴。

问我输入后页面没反应怎么办?是不是工具坏了?+
答

先检查输入框里是否真的输入了内容(包括汉字),部分浏览器在输入全角字符时可能触发输入法冲突。如果输入无误但点击后无响应,尝试刷新页面或清理浏览器缓存。本工具是后端处理,网络不通也会导致无反馈,可以检查一下网络连接。如果以上都试过仍不行,可能是服务端临时故障,建议稍后再试。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

↑↓选择 ↵打开 ⌘+↵新窗口 esc关闭