#6160. 银行卡

银行卡

题目描述

某银行发行了一种 18 位 长度的银行卡号,其编码规则如下:

  1. 前 6 位(第 1~6 位):发卡行识别码,用于标识发卡机构。
  2. 第 7~14 位:账户开立日期,格式为 YYYYMMDD,例如 20250510 表示 2025 年 5 月 10 日。
  3. 第 15~17 位:账户序号,用于区分同一天同一发卡行的账户。第 17 位为奇数表示对公账户,偶数表示个人账户
  4. 第 18 位:校验位,可为数字 0~9 或大写字母 XX 代表数值 10)。

校验规则采用 ISO 7064:1983 MOD 11-2 算法,满足下式则校验通过: 即: (a₁×2¹⁸⁻¹ + a₂×2¹⁸⁻² + ⋯ + a₁₈×2¹⁸⁻¹⁸) mod 11 = 1 其中 aia_i 为卡号第 ii 位对应的数值(第1位位最高位,第18位为检验位),X 对应数值10。

额外约束:

  • 开立日期必须是合法日期,且在 1900-01-012025-05-10 之间(包含两端)。
  • 闰年规则:能被 4 整除但不能被 100 整除,或能被 400 整除的年份为闰年;闰年 2 月有 29 天,平年 2 月有 28 天。

输入格式

第一行一个整数 TT,表示待校验卡号数量。 接下来 TT 行,每行一个长度为 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% 数据:T10000T \le 10000