我正在编写一个 gem 来检测跟踪号(称为tracking_number,natch)。它在文本中搜索有效的跟踪号格式,然后通过每个服务规范中指定的校验和计算来运行这些格式以确定有效的号码。
前几天,我使用 USPS Certified Mail 邮寄了一封信,从 USPS 获得了随附的跟踪号,并将其输入我的 gem,但验证失败。我相当确定我正确地执行了计算,但是已经没有想法了。
该号码使用 USS 代码 128 进行验证,如以下文档的第 2.8 节(第 15 页)所述:http ://www.usps.com/cpim/ftp/pubs/pub109.pdf
我从邮局得到的追踪号码是“7196 9010 7560 0307 7385”,我用来计算校验位的代码是:
def valid_checksum?
# tracking number doesn't have spaces at this point
chars = self.tracking_number.chars.to_a
check_digit = chars.pop
total = 0
chars.reverse.each_with_index do |c, i|
x = c.to_i
x *= 3 if i.even?
total += x
end
check = total % 10
check = 10 - check unless (check.zero?)
return true if check == check_digit.to_i
end
根据我根据提供的规范计算,最后一位数字应该是 3 才能有效。但是,谷歌的跟踪号自动检测可以按原样提取号码,所以我只能假设我做错了什么。