2012-02-13 59 views
2

我使用VB .Net访问eBay API并将所有完成的订单存储在数据库中。然后将该数据库送入专有运输系统,该运输系统无法处理大于20个字符的订单号。 eBay返回的订单号码太长,如230407279314-680141236013。订单号总是12个连字符和12个数字。我需要做的是将这个结果(结果可以是字母数字)转换成一个更短,唯一的订单关键字,与真正的订单ID一起存储在我的数据库中(这样可以通过运输软件而不是实际的订单编号)。 20个字符限制的原因是所使用的条码算法。有没有办法在VB .Net 2010中实现这一点?这个数字可以是任何唯一的,只要它不存在(即使一个好的uniqueid函数可以工作,但我将不得不查询数据库以确保它不被占用)从另一个太长的唯一数值创建一个固定长度的唯一字符串

+0

我的Quickbooks采购订单号码与我们试图合并的另一个系统的采购订单号码相比太短,我也遇到同样的问题。我们最终使用备注字段来存储该号码,因为链接到旧的采购订单编号并不重要(根据会计部门) – 2012-02-13 18:30:54

+0

您的表是否有ident列?只需使用前导零即可。 – cadrell0 2012-02-13 18:39:06

回答

0

您可以将它存储为一个唯一的十六进制数字 - 说你已经将ebay代码存储为两个字符串:lefstr' - 'rightstring。所以在这种情况下,leftstring ='230407279314'和rightstring ='680141236013'。

一旦你把它们放到一个字符串和检索从它的整数值,你应该能够将其存储为十六进制的字符串:id.toString(“X”)

的ID将不超过20个十六进制字符长:)

5

您实际上可以将该数字转换为20个字符的字符串。您可以将数字分成六位数字。由于每个那些只需要20位存储,然后你可以代表他们为五张十六进制数:

230407 -> 38407 
279314 -> 44312 
680141 -> A60CD 
236013 -> 399ED 

这样会给20个字符的字符串:

3840744312A60CD399ED 

像这样做:

Dim code As String = _ 
    Int32.Parse(orderNumber.Substring(0, 5)).ToString("x5") + _ 
    Int32.Parse(orderNumber.Substring(5, 5)).ToString("x5") + _ 
    Int32.Parse(orderNumber.Substring(11, 5)).ToString("x5") + _ 
    Int32.Parse(orderNumber.Substring(16, 5)).ToString("x5") 
+0

只要他使用支持字母表字符的条形码,他就可以使用十六进制 – 2012-02-13 19:01:28

相关问题