クレジットカードの入力フォームを作る時に使ったライブラリで、 DinersClubの番号が対応されていなかったので修正してみた。 github.com 修正の検証で、試しにDinersClubの番号を適当に入力したらエラーになった。 テスト用のカード番号 3056 930902 5904 だとエラーにならないけど、 3056 930902 5914 にすると何でエラーになるんだろう...? と少し考えた後に、 クレジットカード番号の入力誤りチェックにはLuhnアルゴリズムが使われていることを思いだした。 クレジットカードの番号は ISO/IEC 7812 で仕様が決められていて、 1から6桁目までは発行者を識別するための番号、 最後の1桁をチェックデジット(誤り確認のための数字)として使用している。 Luhnアルゴリズム 一の位から数えて奇数番目の場合はそのまま、偶数番目の場合は数を2倍す