UPS 电子打单发票页上面有一个 ShipID 俗称「短单号」。是根据长单号自动计算出来的,那么是怎么计算出来的呢?
正常单号:1Z4V90A96768678127
短单号:4V90A9N3SKP
那么这个号是怎么计算出来的呢?
从往上找了很多资料都没有找到,最有线索的一篇文章是下面这篇:
Generating the UPS shipment ID per packing list Conversion of a string
with BASE26 calculation
- Tracking ID: 1Z 123 X56 Y6 4400 0050
- Exclude the Data Identifier 1Z: __ 123 X56 Y6 4400 0050
- Exclude the shipper number: __ ___ ___ Y6 4400 0050
- Exclude the service indicator and check digit: __ ___ _____ 4400 005_
- Calculate 4400 005 : 26**4 = 9,628
- Calculate (4400 005 - (9264)) : 26*3 = 16,341
- Calculate (4400 005 - (9264) - (16263)) : 262 = 8,883
- Calculate (4400 005 - (9264) - (1626**3) - (826*2)) : 26 = 22,961
- Calculate 4400 005 - (9264) - (1626**3) - (8262) - (2226) = 25,000
5 intermediate results: 9 16 8 22
25 Base 26 cross reference
Value: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Converted Value: 3 4 7 8 9 B C D F G H J K L M N P Q R S T V W X Y Z- G P F W Z
- Final Shipment Number: 123X 56GP FWZ
上面一段说明,大家能给我说说最后的shipment number 是怎么计算的吗,主要是5-9不明白什么意思,没见过这种计算方式
再次证实了这个号码是根据正常单号算出来的!!!
但是这个文章的内容没有人解答,原文中下面的解答也是瞎猜,测试其他单号并不能计算出来。
最后经过我的详细研究,终于给「公婆」了
下面是详细的方法,以1Z4V90A96768678127为例:
- 抽取2至8位,4V90A9
- 抽取10到17位$num10(6867812),10进制转换为26进制$num26(f0jcg)
- 如果转换后的26进制$num26长度小于5位,末尾补3
- 按照0~25 从字典(3 4 7 8 9 B C D F G H J K L M N P Q R S T V W X Y Z)中取值替换,例如 f是15,那么f=N。以此类推,f0jcg=N3SKP
- 拼合步骤1),得到 4V90A9N3SKP
原文出处:http://www.howboring.us/index.php/archives/ups-shipid-generate.html