信用卡磁条解析器 是一个 Python 库和命令行工具,用于解析和分析信用卡的磁条数据。它支持 ISO/IEC 7811-2 和 ISO/IEC 7813 标准中规定的 1 轨和 2 轨格式。
注意 此工具仅用于教学和测试目的。请始终按照 PCI DSS 要求以及适用法律法规处理支付卡数据。
本指南提供了如何使用信用卡磁条解析器库的示例。
from credit_card_stripe_parser import FullTrackParser
# 创建解析器实例
parser = FullTrackParser()
# 轨迹数据示例
track_data = "%B5168755544412233^PKMMV/UNEMBOXXXX ^1807111100000000000000111000000?;5168755544412233=18071111000011100000?
# 解析轨迹数据
result = parser.parse(track_data)
# 访问已解析数据
if result.is_track_one_valid and result.track_one:
print(f"持卡人: {result.track_one.card_holder_name.strip()}")
print(f"PAN: {result.track_one.pan}")
print(f"有效期: {result.track_one.expiration_date[:2]}/{result.track_one.expiration_date[2:]}")
if result.is_track_two_valid and result.track_two:
print(f"服务码: {result.track_two.service_code}")
from credit_card_stripe_parser import FullTrackParser
parser = FullTrackParser()
track1_data = "%B5168755544412233^PKMMV/UNEMBOXXXX ^1807111100000000000000111000000?"
尝试:
track1 = parser.parse_track_one(track1_data)
print(f"轨道 1 数据:{track1}")
except Exception as e:
print(f"解析轨道 1 时出错:{e}")
from credit_card_stripe_parser import FullTrackParser
parser = FullTrackParser()
track2_data = ";5168755544412233=18071111000011100000?"
尝试:
track2 = parser.parse_track_two(track2_data)
print(f"轨道 2 数据:{track2}")
except Exception as e:
print(f"解析轨道 2 时出错:{e}")
该库针对不同的错误场景提供了特定的异常:
from credit_card_stripe_parser import (
FullTrackParser,
InvalidTrackOneException,
InvalidTrackTwoException,
InvalidTrackDataException
)
parser = FullTrackParser()
尝试:
result = parser.parse(invalid_track_data)
except InvalidTrackOneException as e:
print(f"轨道 1 数据无效:{e}")
except InvalidTrackTwoException as e:
print(f"轨道 2 数据无效:{e}")
except InvalidTrackDataException as e:
print(f"轨道数据无效: {e}")
except Exception as e:
print(f"意外错误:{e}")
该库提供了用于处理已解析跟踪数据的数据模型:
from credit_card_stripe_parser.models import TrackOneModel, TrackTwoModel
# 创建 TrackOneModel 实例
track1 = TrackOneModel(
format_code='B',
pan='5168755544412233',
card_holder_name='JOHN DOE',
expiration_date='2512',
service_code='123',
discretionary_data='123456789012345678901',
source_string='%B5168755544412233^JOHN DOE^251212312345678901234567890?'
)
# 创建 TrackTwoModel 实例
track2 = TrackTwoModel(
pan='5168755544412233',
expiration_date='2512',
service_code='123',
pvki=None,
pvv_or_cvv='1234',
discretionary_data='123456789012345678901234567890',
source_string=';5168755544412233=2512123123412345678901234567890?'
)
您可以实现自定义通过子类化解析器进行验证:
from credit_card_stripe_parser import FullTrackParser
class CustomTrackParser(FullTrackParser):
def validate_track_one(self, track_data: str) -> bool:
# 针对 Track 1 的自定义验证逻辑
if not super().validate_track_one(track_data):
return False
# 在此处添加自定义验证
return True
def validate_track_two(self, track_data: str) -> bool:
# 针对 Track 2 的自定义验证逻辑
if not super().validate_track_two(track_data):
return False
# 在此处添加自定义验证
return True
启用 LRC(纵向冗余校验)验证:
parser = FullTrackParser(validate_lrc=True)
# 如果 LRC 验证失败,将抛出异常
try:
result = parser.parse(track_data_with_lrc)
except Exception as e:
print(f"LRC 验证失败:{e}")
注意 LRC 验证要求轨道数据末尾包含 LRC 字符。
此库旨在解析和分析信用卡磁条数据,用于教育和测试目的。
此工具的使用应符合 PCI DSS 要求和适用法律。始终确保适当的安全