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 · 資料表示