使用ocr对社保卡进行了文本检测和文本识别,现在要进行结构化,使得信息栏与内容一一对应,社保卡卡面的社会保障号码和社会保障卡号该如何进行校验?
社会保障号码和社会保障卡号是社保卡上最重要的两个标识,其格式和校验规则如下:
校验规则的具体实现可以参考以下示例代码:
import re
def validate_ssn(ssn):
# 校验社会保障号码
if not re.match(r'^\d{17}[\dX]$', ssn):
return False
weights = [3, 7, 9, 10, 5, 8, 4, 2]
check_digit = '10X98765432'[sum(int(digit) * weight for digit, weight in zip(ssn[:-1], weights)) % 11]
return check_digit == ssn[-1]
def validate_card_number(card_number):
# 校验社会保障卡号
if not re.match(r'^\d{9}$', card_number):
return False
weights = [3, 7, 9, 10, 5, 8, 4, 2, 1]
check_digit = sum(int(digit) * weight for digit, weight in zip(card_number[:-1], weights)) % 11
return check_digit == int(card_number[-1])
【相关推荐】
两个角度来说明一般检测全部区域再筛选更好。