LoginSignup
1
0

More than 5 years have passed since last update.

Luhn チェックおよびコード生成

Last updated at Posted at 2018-07-13

Luhn ってなんぞ

詳しくは WikiPedia 参照で。
ざっくり言えば、数字列の入力が正しいかどうかを検証する仕組みの簡易版。
クレジットカードの番号に使われてる。
このチェックで正しいと判断されても、間違っている可能性はあるので、厳密な判定が必要なケースには使えない。

車輪の再開発感

アプリで使用することがあったので。
多分 node なら既になんらかの便利なモジュールが存在するはず。
クーポンコードとして使いたかったらしい。

利用目的

管理画面から数字列を発行 -> ユーザに配布 -> ユーザがアプリに入力 -> 送信前にアプリ内で簡単に入力チェック -> サーバ送信

実装例

export function check(numbers: string): boolean {
  const len = numbers ? numbers.length : 0
  let sum = 0
  let odd = true

  for (let i = len; i > 0; i--) {
      const num = Number(numbers[i - 1])
      sum += odd ? num : num * 2
      odd = !odd
  }

  return sum % 10 === 0 && sum > 0
}

export function generate(numbers: string): string {
    const len = numbers ? numbers.length : 0
    let sum = 0
    let odd = false

    for (let i = len; i > 0; i--) {
        const num = Number(numbers[i - 1])
        sum += odd ? num : num * 2
        odd = !odd
    }

    const checkNumber = ( sum % 10 ) > 0 ? 10 - ( sum % 10 ) : 0
    return numbers + String(checkNumber)
}
1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0