選單

CVV 是什麼?三位與四位安全碼的差別與規範

CVV 是什麼、為什麼多數卡片印在背面、美國運通又為什麼是正面四位?本文說明它的用途、它與密碼的差別,以及為什麼授權後不能保存它。

發佈於

  • 測試資料
  • 支付

結帳頁上有三個欄位是大家填到不用想就會填的:卡號、有效期限,以及那組短短的安全碼。很多人把它當成「卡片密碼」,其實它叫 CVV,比較準確的理解是「證明卡在你手上」的憑證。它的位數很少、看起來很容易猜,但卡片上的 CVV 完全不出現在磁條或感應交易的資料裡,這正是它存在的意義。這篇會說明它的定義、不同卡組織的差異,以及那條常被忽略的規定:授權完成後就不可以再保存它。

CVV 是什麼,為什麼只有幾位數?

CVV 是 card verification value 的縮寫,指的是印在卡片上、用來在無卡交易(例如網路購物或電話下單)中確認持卡人確實持有實體卡的一組數字。它由發卡行在製卡時,用卡片資料與發卡行的金鑰計算出來,所以無法從卡號反推。

它只有三位或四位,看起來防護力很弱,但它的價值不在於「猜不到」,而在於「不會被一般交易流程帶出去」。磁條與感應交易裡並不含這組數值,因此即使有人在實體店面側錄了卡片,也拿不到它;反過來說,任何能讀出完整卡片資料的管道,都可能讓 CVV 一併外洩。理解這個設計意圖,就會明白為什麼「多填幾次」或「先存起來」都是錯的方向。

三位與四位的差別在哪裡

位數與位置的差異,取決於卡組織的設計,而不是銀行的偏好。

卡組織 位數 印刷位置
多數卡組織(含 Visa、Mastercard、銀聯) 3 位 卡片背面簽名欄附近
美國運通 4 位 卡片正面,卡號右上方

背面三位的那組數字,在不同卡組織的文件裡有不同的正式名稱——有的稱卡片驗證碼,有的稱卡片驗證值——但它們指的是同一個欄位的同一個值。美國運通的四位則印在正面,這一點經常讓第一次使用的人找錯地方。

還有一個常見的混淆:同一張卡上可能同時存在好幾組數字,例如卡號末四位、背面簽名欄的號碼,甚至是印在卡片角落的序號。填表時唯一該放進安全碼欄位的,就是上面那張表對應的那一組。

CVV 跟密碼有什麼不同?

很多使用者以為安全碼是可以改的,就像帳號密碼那樣;實際上它由發卡行在製卡時決定,印在卡片上,持卡人無法設定,也無法變更。換卡時它會跟著換一個新的值。

第二個差別是它不具備「只有你知道」的性質。任何拿到實體卡片的人都能看到它,所以它的任務是證明「卡在現場」,而不是證明「你是本人」。真正用來確認身分的機制是另外一層,例如發卡行的簡訊驗證或 3-D Secure 流程。把這兩件事分清楚,才不會誤以為多檢查幾次安全碼就等於加強了身分驗證。

為什麼表單一定要有這個欄位

既然只有幾位數,能不能乾脆不要這個欄位?對收單方來說,它是無卡交易最基本的防線之一。少了它,任何人只要拿到卡號與有效期限就能嘗試下單;有了它,攻擊者必須先取得實體卡片,或從某個外洩管道拿到這個值。

同時,要求填寫 CVV 也代表商戶必須符合更嚴格的資料保護要求,因為它一進入系統就屬於敏感認證資料。這也是為什麼許多付款流程不讓商戶自己碰到這個欄位,而是直接由金流服務商的元件在付款頁上收集:商戶只看得到「驗證成功」的結果,看不到那個值本身。

安全碼在表單上該怎麼呈現與蒐集?

這個欄位的成敗,往往取決於輸入框本身,而不是驗證邏輯。

  • 標籤與說明要指對位置。 多數人只記得「卡片後面那幾個數字」,把位置與常見位數寫在標籤或說明文字裡,比只放縮寫更能減少放棄填寫。
  • 位數要跟著卡組織變。 一旦辨識出美國運通,提示就該改成正面四位;把位數寫死成三位,會讓正確的輸入被擋下來。
  • 重新付款時不要預先填入。 付款失敗回到表單,卡號與有效期限可以保留,安全碼必須清空,否則那個值只會多活一段時間。
  • 錯誤訊息要可行動。 「驗證失敗」幫不上忙,指出「請輸入卡片正面四碼」或「請確認位數」才有意義。
  • 接受貼上,但別為它建草稿。 使用者常從備忘錄貼過來,流程要接受;但不該因此產生任何形式的中途保存。

在本站產生測試用的安全碼

測試結帳流程時,安全碼通常不需要任何特定值。本站的虛擬信用卡工具在產生每組測試卡號時,會一併附上對應位數的安全碼:多數卡組織給三位,美國運通這類卡給四位,方便你驗證表單在不同卡組織下的欄位行為。

同樣要提醒:這些號碼與安全碼都是結構正確、但從未發行的合成資料,不對應任何帳戶,無法完成任何實際付款,請只用在測試環境。若想了解測試資料在合規上的界線,可以讀 PCI DSS 測試資料。

給開發者:那個欄位不該落庫

規則本身很短,但落地時常被繞過:授權完成之後,安全碼不得被保存,也不得寫進任何形式的紀錄。

  • 不要寫進資料庫。 包含暫存表、除錯用的欄位、使用者草稿,任何會被持久化的地方都不行。
  • 不要寫進日誌。 常見的疏漏是把整個請求內容印出來做排查,那一行就會把安全碼留在地上;遮蔽必須在寫入紀錄之前完成,而不是之後補救。
  • 不要回顯到前端。 驗證失敗後把原值帶回表單欄位,會讓它出現在網頁原始碼、瀏覽器快取與錯誤回報工具裡。
  • 不要在快取或工作階段中長期保留。 若流程必須跨步驟傳遞,也要限制存活時間。
  • 傳輸時確保加密。 這一項與其他敏感欄位相同,沒有例外。

驗證規則方面,建議只檢查「三位或四位數字」以及在對應卡組織下應該有幾位,不要比對任何具體值——測試環境裡不存在「正確答案」,那正是它與密碼的本質差異。

下一步

想知道測試環境裡可以放哪些安全碼,直接到產生器產生一組連同安全碼的測試卡。想接著理解另一組常被問到的欄位,讀信用卡有效期限格式;要檢查整張表單還有哪些情況沒測到,讀支付表單測試清單。

繼續閱讀

信用卡號產生器(測試用)相關文章