さて今回は
「チェックデジット」
というものについてのお話です。
動画はこちら
チェックデジットは
データの正確性を保つ為に使用される文字のことで
様々な分野のID番号などの使用されています。
工業用のコード
クレジットカード
免許証
いろんなチェックデジットが存在し
計算方法が違っています。
今回はクレジットカードの
チェックデジットを計算してみましょう。
クレジットカードの番号には法則があり
最初の6桁はカードの発行元
7-15桁目はカード番号
最後の1桁がチェックデジット
となっています。
また
日本で流通しているカード体系で
最初の1桁は金融機関などの業種を表します。
例えば
Visa 4xxxxx
Mastercard51xxxx - 55xxxx
Amex 34xxxx, 37xxxx
などです。
なので最初の6桁と
最後の1桁は必ず法則に従わないと
そのクレジットカード番号は
正しくない番号となります。
それでは
チェックデジットを計算してみましょう。
クレジットカードのチェックデジットの計算方法
元の番号 : 4417123456789113
奇数桁目を2倍に掛ける
8 2 2 6 10 14 18 2
偶数桁目はそのまま足す
4 7 2 4 6 8 1 3
2桁の数は十の位と1の位を足して1桁にする
(2桁の数になったら9を引けばいい)
8+4+2+7+2+2+6+4+1+0+
6+1+4+8+1+8+1+2+3 = 70
和が10で割れる数なら、そのクレジットカードは有効
こんなルールでカード番号が作られています。
お手元に
クレジットカードがある方は
実際に計算してみてはいかがでしょうか?
それでは
このクレジットカードが正しいのかどうかを
計算するプログラムを作っていきたいと思います。
これは至極簡単で数行で済みます。
カード番号をチェックする関数はコレ。
これを使ってカード番号をチェックしてみましょう。
例題の番号をそのまま使い
カード番号が合っていればTrue
違っていればFalseになります。
それではこの関数を使って
クレジットカード番号を生成してみましょう。
クレジットカード番号を生成する関数はコレ。
実際に使う場合は
このようになります。
最初の6桁は発行元の番号体系に
合わせる必要があります。
引数headの6桁の番号を変更していただければ
その番号で始まるカード番号になります。
さて
チェックデジットはいかがでしたでしょうか?
このように
カード番号などは
チェック機能があるので
デタラメな番号は弾かれるようになっています。
ECサイトなども同様で
正しい番号体系を入れなければ
成立しないようにチェックが働いています。
皆様も
サイト構築をしたりする際は
チェックデジットの仕組みを導入すると
不正防止に繋がりますので
いろいろ考えてみてくださいね
今回はここまでです
それでは。
「チェックデジット」
というものについてのお話です。
動画はこちら
チェックデジットは
データの正確性を保つ為に使用される文字のことで
様々な分野のID番号などの使用されています。
工業用のコード
クレジットカード
免許証
いろんなチェックデジットが存在し
計算方法が違っています。
今回はクレジットカードの
チェックデジットを計算してみましょう。
クレジットカードの番号には法則があり
最初の6桁はカードの発行元
7-15桁目はカード番号
最後の1桁がチェックデジット
となっています。
また
日本で流通しているカード体系で
最初の1桁は金融機関などの業種を表します。
例えば
Visa 4xxxxx
Mastercard51xxxx - 55xxxx
Amex 34xxxx, 37xxxx
などです。
なので最初の6桁と
最後の1桁は必ず法則に従わないと
そのクレジットカード番号は
正しくない番号となります。
それでは
チェックデジットを計算してみましょう。
クレジットカードのチェックデジットの計算方法
元の番号 : 4417123456789113
奇数桁目を2倍に掛ける
8 2 2 6 10 14 18 2
偶数桁目はそのまま足す
4 7 2 4 6 8 1 3
2桁の数は十の位と1の位を足して1桁にする
(2桁の数になったら9を引けばいい)
8+4+2+7+2+2+6+4+1+0+
6+1+4+8+1+8+1+2+3 = 70
和が10で割れる数なら、そのクレジットカードは有効
こんなルールでカード番号が作られています。
お手元に
クレジットカードがある方は
実際に計算してみてはいかがでしょうか?
それでは
このクレジットカードが正しいのかどうかを
計算するプログラムを作っていきたいと思います。
これは至極簡単で数行で済みます。
カード番号をチェックする関数はコレ。
def check_digit(num): tmp1 = [int(num[i])*2 for i in range(len(num)) if i%2==0] tmp1 = [i-9 if i>9 else i for i in tmp1] tmp2 = [int(num[i]) for i in range(len(num)) if i%2==1] total = sum(tmp1+tmp2) return total%10==0
これを使ってカード番号をチェックしてみましょう。
例題の番号をそのまま使い
check_digit('4417123456789113')True
カード番号が合っていればTrue
違っていればFalseになります。
それではこの関数を使って
クレジットカード番号を生成してみましょう。
クレジットカード番号を生成する関数はコレ。
import random def make_card(head = '498003'): num = str(head) + ''.join([str(random.choice([i for i in range(10)])) for i in range(9)]) for i in range(10): if check_digit(num + str(i)): return num + str(i) return None
実際に使う場合は
make_card(head = '498003')4980030390770041
このようになります。
最初の6桁は発行元の番号体系に
合わせる必要があります。
引数headの6桁の番号を変更していただければ
その番号で始まるカード番号になります。
さて
チェックデジットはいかがでしたでしょうか?
このように
カード番号などは
チェック機能があるので
デタラメな番号は弾かれるようになっています。
ECサイトなども同様で
正しい番号体系を入れなければ
成立しないようにチェックが働いています。
皆様も
サイト構築をしたりする際は
チェックデジットの仕組みを導入すると
不正防止に繋がりますので
いろいろ考えてみてくださいね
今回はここまでです
それでは。