2.3 · 数据控制 —— Validation、Verification 与奇偶校验
目标: 区分 validation 与 verification、列出常用技术、解释奇偶校验如何检测错误。
为何需要数据控制
垃圾进 → 垃圾出。如果用户输入 Bn 而不是 Bob,系统可能:
- 发错邮件、
- 扣错账户、
- 在毕业证书上印错名字。
数据控制是一系列在数据进入或在系统中流动时预防、检测或纠正错误的技术的统称。
三类技术
| 类别 | 由谁执行 | 何时 |
|---|---|---|
| Validation 校验 | 软件(自动) | 数据录入时 |
| Verification 核对 | 人(手动) | 数据录入时 |
| Parity check 奇偶校验 | 硬件 / 软件 | 传输或储存时 |
记忆钩
- Validation = 由代码 (Verbose computer) 来 Validate
- Verification = 由 Viewer(人)来 Verify
- Parity = 数据上贴的便条「我的 1 是奇 / 偶数」
Validation 细节
Validation 规则是软件依据预定标准做的检查。输入不通过就要求重输。
常见 validation 类型
| 类型 | 检查什么 | 例子 |
|---|---|---|
| Range check 范围 | 值在可接受范围内 | 年龄在 0 到 150 |
| Presence check 非空 | 字段不为空 | 姓名必填 |
| Format / picture check 格式 | 符合某种模式 | HK_ID = X123456(7) |
| Length check 长度 | 字符数在限内 | 密码长度 ≥ 8 |
| Type / data type check 类型 | 数字 vs 文字 vs 日期 | 电话号码只能数字 |
| Check digit 校验位 | 由其他位算出的末位 | HKID 校验字母、ISBN、信用卡(Luhn) |
| Lookup check 查表 | 值存在于参考列表中 | 国家代码在 ISO 3166 内 |
| Consistency check 一致性 | 两个字段相符 | 出发日期 ≤ 返程日期 |
实例 · 校验位(HKID)
HKID 校验字母由各位数字按加权和模 11 算出。软件对你输入的数据做同样计算,若结果与字母不符则拒绝 —— 一个笔误也抓得到。
Validation 不等于准确
Validation 规则确认输入合理,不等于正确。「Alice 年龄 = 17」即便 Alice 实际是 16 也能通过 range check。
Verification 细节
Verification 是确认数据已被正确转移的人为检查。
常见 verification 技术
| 技术 | 工作方式 |
|---|---|
| Visual check 视觉核对 | 用户对照原件再读一次输入 |
| Double entry 双录入 | 同一数据输入两次(常由两位不同操作员),系统比对 |
| Read-back 回读 | 客服把数据回读给来电者 |
| Print and proofread 打印校对 | 出版业常用 |
实例 · 密码确认
几乎每个注册表单都让你输入密码两次。这是双录入 —— 是 verification,不是 validation。软件不知道你输入的密码是否符合你心中所想;第二次输入是你自己的手动检查。
Validation vs Verification 并排
| 方面 | Validation | Verification |
|---|---|---|
| 由谁做 | 软件 | 人 |
| 检测 | 不合理值 | 抄录 / 输入错误 |
| 例子 | age <= 150 规则 | 重输密码 |
| 保证正确? | 否 | 否,但能大幅减少输入错误 |
| 何时进行 | 录入时实时 | 录入时或之后 |
奇偶校验
Parity 是用于传输或储存的硬件级错误检测技术。
偶校验的工作方式
发送一个 n 位数据字节时,发送方附加一个校验位,使 1 的总数(数据 + 校验)为偶数。
例(偶校验,7 位数据 + 1 位校验):
| 数据位 | 1 的个数 | 校验位 | 发送字节 |
|---|---|---|---|
1010101 | 4(偶) | 0 | 10101010 |
1010100 | 3(奇) | 1 | 10101001 |
接收方数收到字节中 1 的个数。若个数(偶校验下)为奇,则字节在传输中被破坏。
奇校验
奇校验类似,但 1 的总数应为奇。两种约定都行,只要收发双方一致。
局限
- 仅检测单位错误。两位翻转会相互抵消。
- 只能检测错误,不能纠正。
- 更高级的方案(Hamming 码、CRC)能检测并纠正多位错误,但超出课程范围。
奇偶校验出现的地方
- 早期调制解调器与串口线。
- RAM ECC(错误纠正码)模块用更丰富的形式。
- 储存设备保完整性(如 RAID 有奇偶盘)。
完整流水线
┌─────────────────┐
USER ──INPUT──▶│ Validation 校验 │ 不过则拒绝
└─────┬───────────┘
│
▼
┌─────────────────┐
│ Verification │ 用户复核 / 重输
└─────┬───────────┘
│
▼ 储存
┌─────────────────┐
│ Parity 奇偶校验 │ 检测传输中位翻转
└─────────────────┘2
3
4
5
6
7
8
9
10
11
12
13
练习活动
把每条归类为 validation (V)、verification (R) 或 parity (P):
- 登录表单拒绝少于 8 字符的密码。
- 你重输新密码确认。
- HKID 页面拒绝无效校验字母。
- 网卡检测出受损以太网帧。
- 图书馆员在扫描前把借书人姓氏回读给学生听。
- 会员表单拒绝非数字电话号码。
答案
- V(长度 / 范围)
- R(双录入)
- V(校验位)
- P(帧级奇偶 / 类似机制)
- R(视觉 / 回读)
- V(数据类型)
考试式题目
题(5 分): 诊所的网上预约表单收集病人的姓名、HKID、电话号码和预约时间。为四个字段各建议一项合适的 validation 检查,并为整张表单提一项 verification 技术。
参考答案:
- 姓名 —— presence check(不能空);可加长度 ≤ 100。
- HKID —— format check(
X123456(7))和校验位检查。 - 电话号码 —— length check(香港 8 位数字)和 type check(仅数字)。
- 预约时间 —— range check(在诊所营业时间内)和 consistency check(不能在过去)。
- Verification —— 提交前显示摘要页让病人确认(视觉核对),或发确认邮件 / 短信附确认链接。
学生常见错误
- 说 validation「保证」数据正确 —— 不能。
- 把「captcha」列为 validation —— 验证码确认你是人,不是数据质量。
- 混淆奇偶校验和加密 —— 奇偶是错误检测,加密是保密。
- 忘记校验位是 validation 的一种特殊形式。
关键要点
- Validation = 录入时的软件检查。
- Verification = 录入时的人工检查。
- Parity = 传输 / 储存时的位级错误检测。
- 三者都能提升数据质量,但没有一个能保证正确。
➡️ 下一章:3 · 数据表示