Luhn

Luhn

中等

簡介

在 Global Verification Authority,你剛被交付了一項重要任務。 從線上購物到安全登入,城市裡無數的作業都仰賴信用卡號、銀行帳號、交易代碼和追蹤編號等數字識別碼的正確性。 Luhn 演算法是一個簡單的校驗碼公式,用來確保這些號碼有效且沒有錯誤。

一批識別碼剛剛送到你的桌上。 它們全都必須通過 Luhn 測試,才能確認是合法的。 只要有任何一筆沒通過,就會被標記為無效,藉此防止錯誤或詐騙,例如交易出錯或未經授權的存取。

你能確保這件事正確完成嗎?許多服務能否正常運作,都取決於你喔。

說明

判斷一個信用卡號碼是否符合 Luhn 公式。

這個號碼會以字串的形式提供。

驗證數字

長度為 1 或更短的字串無效。 輸入中允許有空格,但檢查前應先將它們移除。 其他所有非數字字元都不允許。

範例 1:有效的信用卡號碼

4539 3195 0343 6467

Luhn 演算法的第一步是將每隔一位的數字加倍,從最右邊開始。 我們要加倍的是

4539 3195 0343 6467
↑ ↑  ↑ ↑  ↑ ↑  ↑ ↑  (double these)

如果加倍後的數字大於 9,就從乘積中減去 9。 加倍後的結果是:

8569 6195 0383 3437

接著將所有數字相加:

8+5+6+9+6+1+9+5+0+3+8+3+3+4+3+7 = 80

如果總和能被 10 整除,這個數字就是有效的。 這個數字有效!

範例 2:無效的信用卡號碼

8273 1232 7352 0569

將每隔一位的數字加倍,從最右邊開始

7253 2262 5312 0539

將數字相加

7+2+5+3+2+2+6+2+5+3+1+2+0+5+3+9 = 57

57 不能被 10 整除,所以這個數字無效。

透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Scala Exercism

準備好開始 Luhn 了嗎?

註冊 Exercism,透過 95 個練習 和真人引導來學習並精通 Scala,全部免費。

深入探索 Luhn!

我們會探索 8 種不同版本的 Luhn,從一個非常簡潔的 Ruby 實作開始,接著看看一些指令式與函式風格的做法,最後來到一個讓 Erik 和 Jeremy 花了一番功夫才解讀出來的 SQLite 版本!