gpt4 book ai didi

ruby - 为什么这个有效的 USPS 追踪号码没有根据他们的规范进行验证?

转载 作者:数据小太阳 更新时间:2023-10-29 07:47:10 27 4
gpt4 key购买 nike

我正在编写一个 gem 来检测跟踪号码(称为 tracking_number ,natch)。它在文本中搜索有效的跟踪号码格式,然后按照每个服务规范中指定的校验和计算运行这些格式,以确定有效号码。

前几天,我使用 USPS Certified Mail 寄了一封信,从 USPS 获得了随附的跟踪号,然后将其放入我的 gem 中,但未通过验证。我相当确定我正在正确地执行计算,但已经没有想法了。

如以下文档第 2.8 节(第 15 页)所述,该号码使用 USS 代码 128 进行验证: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 才能有效。但是,Google 的追踪号码自动检测功能可以正常检测号码,所以我只能假设我做错了什么。

最佳答案

根据我的手动计算,它应该与您的代码所做的相匹配:

posn: 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2   sum  mult
even: 7 9 9 1 7 6 0 0 7 8 54 162
odd: 1 6 0 0 5 0 3 7 3 25 25
===
187

因此校验位应该是三位。

如果该数字有效,那么他们使用的算法与您认为的算法不同

我认为可能是这种情况,因为当我将您提供的号码插入 USPS 追踪器页面时,我可以看到它的完整路径。


事实上,如果你看publication 91 ,Confirmation Services Technical Guide,您会看到它使用了两个额外的数字,包括前面的 91 用于跟踪应用程序 ID。应用出版物中的算法,我们可以:

posn: 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2   sum  mult
even: 9 7 9 9 1 7 6 0 0 7 8 63 189
odd: 1 1 6 0 0 5 0 3 7 3 26 26
===
215

这将确实给你一个校验位 5。我并不是说这就是答案,但它确实符合事实并且至少是一个可行的解释。

最好的办法可能是联系 USPS 获取信息。

关于ruby - 为什么这个有效的 USPS 追踪号码没有根据他们的规范进行验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5073717/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com