#6160. 银行卡
银行卡
题目描述
某银行发行了一种 18 位 长度的银行卡号,其编码规则如下:
- 前 6 位(第 1~6 位):发卡行识别码,用于标识发卡机构。
- 第 7~14 位:账户开立日期,格式为
YYYYMMDD,例如20250510表示 2025 年 5 月 10 日。 - 第 15~17 位:账户序号,用于区分同一天同一发卡行的账户。第 17 位为奇数表示对公账户,偶数表示个人账户。
- 第 18 位:校验位,可为数字 0~9 或大写字母
X(X代表数值 10)。
校验规则采用 ISO 7064:1983 MOD 11-2 算法,满足下式则校验通过:
即:
(a₁×2¹⁸⁻¹ + a₂×2¹⁸⁻² + ⋯ + a₁₈×2¹⁸⁻¹⁸) mod 11 = 1
其中 为卡号第 位对应的数值(第1位位最高位,第18位为检验位),X 对应数值10。
额外约束:
- 开立日期必须是合法日期,且在
1900-01-01至2025-05-10之间(包含两端)。 - 闰年规则:能被 4 整除但不能被 100 整除,或能被 400 整除的年份为闰年;闰年 2 月有 29 天,平年 2 月有 28 天。
输入格式
第一行一个整数 ,表示待校验卡号数量。
接下来 行,每行一个长度为 18 的字符串(前 17 位为数字,第 18 位为数字或大写 X)。
输出格式
对每个卡号,若所有条件均通过输出 PASS,否则输出 FAIL(均为大写)。
样例 #1
样例输入 #1
2
14021320141203937X
140213201412039372
样例输出 #1
PASS
FAIL
样例 #2
样例输入 #2
5
11260019811223188X
13303720061018861X
13539819111030170X
122801192101033134
126648196812304507
样例输出 #2
PASS
FAIL
FAIL
PASS
PASS
说明
以 14021320141203937X 为例:
- 日期段
20141203合法且在范围内。 - 第 17 位是 7(奇数),为对公账户。
- 校验位
X按 10 计算,代入公式后模 11 余 1,校验通过。 故输出PASS。
第二个卡号仅校验位不同,校验不通过,输出 FAIL。
数据范围与提示
- 30% 数据:日期段一定合法且在范围内。
- 100% 数据:。