2012-02-13 1 views
2

Я использую VB .Net для доступа к API eBay и сохранения всех завершенных заказов в базе данных. Затем эта база данных подается в проприетарную систему доставки, которая не может обрабатывать номер заказа, превышающий 20 символов. eBay возвращает номер заказа, например 230407279314-680141236013, который слишком длинный. Номер заказа всегда содержит 12 цифр дефис и еще 12 номеров. Что мне нужно сделать, это превратить это (результат может быть альфа-числовым) в более короткий, уникальный ключ заказа, который будет храниться в моей базе данных вместе с истинным orderId (так что на это может ссылаться программное обеспечение для доставки вместо фактического номера заказа). Причиной 20-символьного ограничения является используемый алгоритм штрих-кода. Есть ли способ достичь этого в VB .Net 2010? Это число может быть чем-то уникальным, если оно уже не существует (даже хорошая функция uniqueid будет работать, но мне нужно будет запросить базу данных, чтобы убедиться, что она не была сделана)Создайте уникальную строку фиксированной длины из другого уникального числового значения, которое слишком велико.

+0

У меня была такая же проблема с номерами Quickbooks PO, которые были слишком короткими по сравнению с номерами телефонов другой системы, которые мы пытались объединить. Мы закончили использование полей Memo для хранения этого номера, так как было не так важно сделать ссылку на старый номер PO (согласно отделу бухгалтерии) –

+0

Имеется ли в вашей таблице столбец идентификатора? Просто используйте это с ведущими нулями. – cadrell0

ответ

0

Вы можете сохранить его как одно уникальное шестнадцатеричное число - скажем, вы сохранили код ebay как две строки: lefstr '-' rightstring. Итак, в этом случае leftstring = '230407279314' и rightstring = '680141236013'.

, как только вы поместите их в одну строку и извлекаться целое значение от него вы должны быть в состоянии сохранить его в виде строки в шестнадцатеричном: id.toString («х»)

идентификатор будет не более 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

Он мог использовать шестнадцатеричный, пока он использует штрих-код, который поддерживает алфавитный символ –

Смежные вопросы