goo blog サービス終了のお知らせ 

CyberChaos(さいばかおす)

プログラミング言語、トランスパイラ、RPA、ChatGPT、データマイニング、リバースエンジニアリングのための忘備録

クレジットカード決済システムのPythonコード

2025-02-09 07:46:05 | python
以下は、PythonのTkinterを使用したシンプルなクレジットカード決済システムのGUIプログラム例です。基本的な入力検証とルーンアルゴリズムによるカード番号の検証を含んでいます。

```python
import tkinter as tk
from tkinter import ttk, messagebox
from datetime import datetime

class CreditCardPaymentGUI:
def __init__(self, root):
self.root = root
self.root.title("クレジットカード決済システム")
# 変数の初期化
self.card_number = tk.StringVar()
self.card_holder = tk.StringVar()
self.exp_month = tk.StringVar()
self.exp_year = tk.StringVar()
self.cvv = tk.StringVar()

# GUIコンポーネントの作成
self.create_widgets()

def create_widgets(self):
# スタイル設定
style = ttk.Style()
style.configure("TLabel", padding=5, font=('Helvetica', 10))
style.configure("TButton", padding=5, font=('Helvetica', 10))

# 入力フィールド
ttk.Label(self.root, text="カード番号:").grid(row=0, column=0, sticky=tk.W)
card_entry = ttk.Entry(self.root, textvariable=self.card_number, width=25)
card_entry.grid(row=0, column=1, columnspan=2)

ttk.Label(self.root, text="名義人:").grid(row=1, column=0, sticky=tk.W)
ttk.Entry(self.root, textvariable=self.card_holder, width=25).grid(row=1, column=1, columnspan=2)

ttk.Label(self.root, text="有効期限:").grid(row=2, column=0, sticky=tk.W)
self.create_expiration_dropdowns()

ttk.Label(self.root, text="CVV:").grid(row=3, column=0, sticky=tk.W)
ttk.Entry(self.root, textvariable=self.cvv, width=8).grid(row=3, column=1, sticky=tk.W)

# 送信ボタン
ttk.Button(self.root, text="支払いを実行", command=self.process_payment).grid(row=4, column=1, pady=10)

def create_expiration_dropdowns(self):
# 月のドロップダウン
months = [f"{m:02d}" for m in range(1, 13)]
self.exp_month.set(datetime.now().strftime("%m"))
ttk.Combobox(self.root, values=months, textvariable=self.exp_month, width=5).grid(row=2, column=1)

# 年のドロップダウン
current_year = datetime.now().year
years = [str(y) for y in range(current_year, current_year + 11)]
self.exp_year.set(str(current_year))
ttk.Combobox(self.root, values=years, textvariable=self.exp_year, width=5).grid(row=2, column=2)

def process_payment(self):
try:
# 入力検証
if not self.validate_inputs():
return

# ここで実際の決済処理を実装
# (この例ではシミュレーションのみ)
messagebox.showinfo("成功", "決済が正常に完了しました!")
self.root.destroy()

except Exception as e:
messagebox.showerror("エラー", f"処理中にエラーが発生しました: {str(e)}")

def validate_inputs(self):
# カード番号の検証
card_num = self.card_number.get().replace(" ", "")
if not (card_num.isdigit() and len(card_num) == 16):
messagebox.showerror("エラー", "無効なカード番号です")
return False

if not self.luhn_check(card_num):
messagebox.showerror("エラー", "カード番号が正しくありません")
return False

# 名義人検証
if len(self.card_holder.get().strip()) < 3:
messagebox.showerror("エラー", "無効な名義人名です")
return False

# 有効期限検証
exp_date = datetime(int(self.exp_year.get()), int(self.exp_month.get()), 1)
if exp_date < datetime.now().replace(day=1):
messagebox.showerror("エラー", "カードは有効期限切れです")
return False

# CVV検証
cvv = self.cvv.get()
if not (cvv.isdigit() and len(cvv) in (3, 4)):
messagebox.showerror("エラー", "無効なCVVコードです")
return False

return True

def luhn_check(self, card_num):
total = 0
reverse_num = card_num[::-1]
for i, digit in enumerate(reverse_num):
n = int(digit)
if i % 2 == 1:
n *= 2
if n > 9:
n -= 9
total += n
return total % 10 == 0

if __name__ == "__main__":
root = tk.Tk()
app = CreditCardPaymentGUI(root)
root.mainloop()
```

このプログラムの主な特徴:

1. 入力検証機能:
- カード番号のルーンアルゴリズムチェック
- 有効期限の日付検証
- CVVコードの長さと数値チェック
- 名義人の最低文字数チェック

2. GUI要素:
- クレジットカード情報入力フォーム
- 月/年のドロップダウン選択
- レスポンシブなレイアウト
- エラーメッセージ表示

3. セキュリティ機能:
- センシティブな情報を実際に処理しない(デモ用)
- 基本的な入力フォーマットチェック

4. ユーザーフレンドリーな設計:
- 現在の年月をデフォルトで設定
- 明確なエラーメッセージ
- 直感的なインターフェース

実際の決済システムで使用するには、以下の拡張が必要です:

1. 実際の決済ゲートウェイAPIとの連携
2. データ暗号化
3. PCI DSSコンプライアンスへの対応
4. より高度なエラーハンドリング
5. ロギング機能
6. マルチスレッド処理
7. 3Dセキュア認証の統合

注意:このコードはデモンストレーション目的のみで、実際の決済処理には使用しないでください。本番環境でクレジットカード情報を扱う場合は、PCI DSS規格に準拠した適切なセキュリティ対策が必要です。








最新の画像もっと見る

コメントを投稿

サービス終了に伴い、10月1日にコメント投稿機能を終了させていただく予定です。
ブログ作成者から承認されるまでコメントは反映されません。