某银行发行了一种 18 位长度的银行卡号,其编码规则如下:
1.前 6 位(第 1 到 6 位)为发卡行识别码,用于标识发卡机构。
2.第 7 到 14 位为账户开立日期,格式为 YYYYMMDD,例如 20250510 表示 2025 年 5 月 10 日。
3.第 15 到 17 位为账户序号,用于区分同一天在同一发卡行开立的多个账户。其中第 17 位为奇数表示该账户为对公账户,偶数表示个人账户。
4.第 18 位为校验位,其值可为数字 0-9 或大写字母 X(X 代表数值 10)。银行采用 ISO 7064:1983 MOD 11-2 校验算法,当且仅当下列等式成立时校验通过:

即:
其中 ai 表示卡号第 i 位字符对应的数值(第 1 位为最高位,第 18 位为校验位),X 对应数值 10。
除校验位验证外,系统还要求开立日期必须为合法存在的日期,且介于 1900 年 1 月 1 日至 2025 年 5 月 10 日之间(包含端点)。
日期合法性需考虑闰年:能被 4 整除但不能被 100 整除的年份为闰年,能被 400 整除的年份也为闰年(例如 2000 年是闰年,1900 年不是)。闰年 2 月有 29 天,平年 2 月有 28 天。
第一行一个整数 T,表示待校验的卡号数量。
接下来 T 行,每行一个长度为 18 的字符串(前 17 个字符保证为数字,第 18 个字符为数字或大写字母 X),表示一个待校验的银行卡号。
对于每个卡号,输出一行:若所有校验条件均通过,则输出 PASS,否则输出 FAIL。输出均为大写字母。
2 14021320141203937X 140213201412039372
PASS FAIL
5 11260019811223188X 13303720061018861X 13539819111030170X 122801192101033134 126648196812304507
PASS FAIL FAIL PASS PASS
说明
样例说明
·第一个卡号 14021320141203937X:
前 6 位 140213 为发卡行识别码。
第 7 到 14 位 20141203 表示开立日期为 2014 年 12 月 3 日,
该日期在 1900 年 1 月 1 日至 2025 年 5 月 10 日之间且合法(2014 年不是闰年,12 月有 31 天,3 日存在)。
第 15 到 17 位 937,第 17 位为 7(奇数),对应对公账户。
校验计算:将第 18 位 X 视为 10,代入公式得到余数为 1,校验通过。
因此输出 PASS。
·第二个卡号 140213201412039372:
前 17 位与上一个卡号完全相同,但第 18 位为数字 2。代入校验公式计算,余数不为 1,校验失败。
因此输出 FAIL。
数据范围
对于 30% 的数据,卡号中的日期部分保证是 1900 年 1 月 1 日至 2025 年 5 月 10 日之间的合法日期。
对于 100% 的数据,T≤10,000。
| 时间限制 | 1 秒 |
| 内存限制 | 128 MB |