2012-06-15 58 views
2

如果標題有誤導性,但我必須開發條形碼格式(1D或2D,無所謂),我很抱歉。條形碼需要包括採購訂單#,提貨單#以及訂單上出現的每件商品的行號,產品ID號和數量。 任何人有任何想法做到這一點?開發一個有效的條形碼系統/代碼

這裏是我想出迄今有:

的PurchaseOrder# - 提貨單#|產品1ID行號#數量| Product2ID行號#數量|產品3 ...

什麼,這一觀點的字符串實際上可能看起來像:

VO12340000-APX132 * 65465 112 * 897965 2 5 * 98464 3 88 *

這種想法用 「*」 作爲一個休息角色來說明項目之間的差異,以及每個特定特質都有必要的長度。對我來說,似乎必須有更好的方法來實現這一點。這個想法很難讓我公司的一個供應商實施,因爲它非常複雜和精確。任何有關如何做到這一點的見解或想法將不勝感激。

編輯:雖然我使用VB.NET。這更多的是一般的編程邏輯問題。

回答

1

我們在這裏使用QR碼。在您的應用程序中,您可以使用純文本格式,然後使用正則表達式處理它們。此外,他們有冗餘和大量的免費/開源軟件來支持生成和閱讀。

+0

感謝您的回覆,任何特定的鏈接到開源軟件? – SpartanSteelHead

+0

也許更多你正在尋找的是[String.Split](http://msdn.microsoft.com/en-us/library/system.string.split.aspx)方法來解析任何分隔符(s)你有。 –

0

還有其他複雜的條形碼,如HIBC LIC和HIBC PAS,使用Code39或Code128(http://www.hibcc.org/autoidupn/standards.htm)實現。

重要的是使用能夠生成壓縮條形碼的符號系統,以便通過通用條形碼掃描儀進行讀取。所以你可以使用Code39或Code128(GS1系列)並用任何(AIs/FUNC)代替*。

如果我是你,我會使用Code93 Extended symbology去保留內容規範。

下面的代碼來自我過去爲幾乎所有符號學所做的庫,它將爲您提供實施Code93 Extended所需的內容。它使用C#,但很容易將其轉換爲VB.NET。請記住,您將不得不根據自己的需要對其進行修改,並且只會生成一系列條形圖而不繪製它們。

 private static int[] 
      C93Table = { 131112, 111213, 111312, 111411, 121113, 121212, 121311, 111114, 131211, 141111, 211113, 211212, 211311, 221112, 221211, 231111, 112113, 112212, 112311, 122112, 132111, 111123, 111222, 111321, 121122, 131121, 212112, 212211, 211122, 211221, 221121, 222111, 112122, 112221, 122121, 123111, 121131, 311112, 311211, 321111, 112131, 113121, 211131, 121221, 312111, 311121, 122211 }; 
     static string[] 
      C93TableX = { "bU", "aA", "aB", "aC", "aD", "aE", "aF", "aG", "aH", "aI", "aJ", "aK", "aL", "aM", "aN", "aO", "aP", "aQ", "aR", "aS", "aT", "aU", "aV", "aW", "aX", "aY", "aZ", "bA", "bB", "bC", "bD", "bE", " ", "cA", "cB", "cC", "cD", "cE", "cF", "cG", "cH", "cI", "cJ", "cK", "cL", "cM", "cN", "cO", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "cZ", "bF", "bG", "bH", "bI", "bJ", "bV", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bK", "bL", "bM", "bN", "bO", "bW", "dA", "dB", "dC", "dD", "dE", "dF", "dG", "dH", "dI", "dJ", "dK", "dL", "dM", "dN", "dO", "dP", "dQ", "dR", "dS", "dT", "dU", "dV", "dW", "dX", "dY", "dZ", "bP", "bQ", "bR", "bS", "bT" }; 
     static string C93Set = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%abcd"; 

private void Code93X() 
     { 
      string source = request.Data; 
      Error valid = Validate(source, 197, C93Set); 
      if (valid != Error.None) 
      { 
       encoded = new Encoded() { Error = valid }; 
       return; 
      } 
      StringBuilder adapt = new StringBuilder(); 
      for (int i = 0; i < source.Length; i++) 
       adapt.Append(C93TableX[(byte)source[i]]); 
      Code93(adapt.ToString()); 
     } 

private void Code93(string source) 
     { 
      StringBuilder bars = new StringBuilder(); 
      bars.Append(111141); 
      int c = 0, k = 0; 
      int[] values = new int[source.Length + 1]; 
      for (int i = 0; i < source.Length; i++) 
      { 
       values[i] = C93Set.IndexOf(source[i]); 
       bars.Append(C93Table[values[i]]); 
      } 
      if (request.AddChecksum) 
      { 
       int weight = 1; 
       for (int i = source.Length - 1; i >= 0; i--) 
       { 
        c += values[i] * weight; 
        if (++weight == 21) 
         weight = 1; 
       } 
       c %= 47; 
       values[source.Length] = c; 
       bars.Append(C93Table[c]); 
       source += C93Set[c]; 
       weight = 1; 
       for (int i = source.Length - 1; i >= 0; i--) 
       { 
        k += values[i] + weight; 
        if (++weight == 16) 
         weight = 1; 
       } 
       k %= 47; 
       bars.Append(C93Table[k]); 
       if (request.DisplayChecksum) 
        source += C93Set[k]; 
      } 
      bars.Append(1111411); 
      source = string.Concat("*", source, "*"); 
      encoded = new Encoded(bars.ToString(), source); 
     } 


     private Error Validate(string source, int maxLength, string set) 
     { 
      Error valid = Validate(source, maxLength); 
      if (valid == Error.None) 
       for (var i = 0; i < source.Length; i++) 
        if (set.IndexOf(source[i]) < 0) 
        { 
         valid = Error.InvalidCharacters; 
         break; 
        } 
      return valid; 
     } 
+0

我覺得我可能會誤導你們與我的問題。我要求的內容是開發條形碼中的內容。我使用特定字符的換行符和需要不變的精確長度似乎過於複雜。 – SpartanSteelHead

+0

精確的長度不是最明智的想法。正斜槓(/)或管道(|)或其他任何不會讓您與其他內容混淆的東西,都會給您更多的靈活性。無論如何,你必須能夠將內容分離到記錄和字段。接受它:) – 2012-06-15 18:27:51

+0

哈!接受我猜!感謝嚴酷的事實:D – SpartanSteelHead