本题要求对单号进行格式与校验位核验,并在必要时修复。单号规则为:前 8 位由“2 位大写字母 + 6 位数字”组成,第 9 位为校验位。校验位的计算算法为:对前 8 位每个字符取 ASCII 码求和,结果对 26 取余,再加上 A
的 ASCII 码,得到的大写字母即为校验位。
核心步骤(字符串处理与取模运算):
Invalid
。[A-Z]{2}\d{6}
。若不满足,返回 Invalid
。check = chr( (sum(ord(c) for c in s[:8]) % 26) + ord('A') )
多多在快递公司负责快递单号录入工作,这些单号有严格的格式要求:
1.快递单号由 3 部分组成:2 位大写字母 (A~Z) +6 位数字 +1 位校验位
2.校验位计算规则:取前 8 位( 2 字母+ 6 数字)中每个字符的 ASCII 码之和,对 26 余后,加上 A 的 ASCII 码,得到的字符即为校验位
现在有一批可能存在校验位错误的单号,请你编写程序:
1.若单号格式正确且校验位正确,返回原单号
2.若前 8 位格式正确但校验位错误,返回修复后(校正校验位)的单号
3.若前 8 位格式错误(非 2 字母 +6 数字)或快递单号不满足格式要求,返回字符串 Invalid
共一行,一个字符串 (1<=长度 <=1024 ),表示待校验的快递单号
共一行,一个字符串,表示修复后的快递单号,若无法修复则返回字符串 Invalid
输入
AB123456C
输出
AB123456Y
说明
前 8 位字符:A(ASCII 码 =65)、B(ASCII 码 =66)、1(ASCII 码 =49)、2(ASCII 码 =50)、3(ASCII 码 =51)、4(ASCII 码 =52)、5(ASCII 码 =53)、6(ASCII 码 =54)
总和:65+66+49+50+51+52+53+54=440,440 % 26=24,24+65(A 的 ASCII 码 )=89,对应字符 Y
因此该单号校验位错误,正确单号应为 AB123456Y
输入
AC123456Z
输出
AC123456Z
说明
前 8 位字符:A(ASCII 码 =65)、C(ASCII 码 =67)、1(ASCII 码 =49)、2(ASCII 码 =50)、3(ASCII 码 =51)、4(ASCII 码 =52)、5(ASCII 码 =53)、6(ASCII 码 =54)
总和:65+67+49+50+51+52+53+54=441,441 % 26=25 ,25+65( A 的
ASCII 码)=90,对应字符 Z
因此该单号校验位正确,直接返回单号 AC123456Z
输入
AC123M56Z
输出
Invalid
说明
快递单号由 3 部分组成:2 位大写字母 +6 位数字 +1 位大写母校验位,不满足规则,直接返回 Invalid