2009-08-07 8 views
0

Ich untersuche die Codierung von Datumsinformationen in einen linearen Barcode, der so kurz wie möglich sein muss. Eine Idee, die wir hatten, ist das Codieren von Datumsinformationen, anstatt die ASCII-Zeichen für die Datumszahlen zu verwenden.Codierung eines Datums in einen ASCII-Barcode

  1. Das früheste Datum codiert werden soll, 01-JAN-2009
  2. Datum muss

Antwort

3

Wenn nur das Datum Angelegenheiten (nicht die Zeit):

Take the date to be encoded. 
Subtract 1-1-2009 from it 
Get the amount of elapsed days. 

Um diese Nummer als druckbare Folge von ascii Zeichen (ASCII 48-127) kodieren Sie die folgende

Pseudocode:

const int ASCIILOWRANGE = 48 
const int ASCIIHIGHRANGE = 126 
const char ASCIIENDMARKER = 127; 


String convertToAscii(int numberOfDays) 
{ 
     String output = ""; 

     while(numberOfDays>0) 
     { 
      output += (char) ASCIILOWRANGE + numberOfDays % (ASCIIHIGHRANGE-ASCIILOWRANGE); 
      numberOfDays /= (ASCIIHIGHRANGE-ASCIILOWRANGE); 
     } 
     output += ASCIIENDMARKER ; 
     return output; 
} 

//decoder 
int convertToDays(String ascii) 
{ 
     char rightmost; 
     int numberOfDays = 0; 
     while(ascii.length>0) 
     { 
     rightmost = ascii[0]; 
      if(rightmost == ASCIIENDMARKER) break; //ready 

      numberOfDays *= (rightmost - ASCIILOWRANGE) * (ASCIIHIGHRANGE-ASCIILOWRANGE); 
      ascii = ascii.substr(1); //remove rightmost char from string 
     } 
     return numberOfDays ; 
} 

Diese Art der Codierung ist am dichtesten. Da es in nur 2 Zeichen bis zu 96 Tage in die Zukunft kodiert. 9216 Tage, in 3 Zeichen, 884736 Tage in 4 Zeichen.

+0

Dies scheint enger zu sein als meine obige Idee, scheint aber nur 24 zu erreichen Jahre in die Zukunft mit 3 Charakteren. Mache ich etwas falsch? –

+0

ja ... mit jedem Zeichen steigt die Zeit um einen Faktor 96. So hätten uns zum Beispiel 8 Zeichen: 96^7 Tage = 205876021399 Jahre. So denkt es, es ist zukunftssicher; ^) – Toad

+0

, um es besser zu visualisieren ... Es ist wie Dezimal verwendet Basis 10. Hex verwendet Basis 16. Diese Methode verwendet Base 96 (96 druckbare Ascii Zeichen). Also zählt so a, b, c, ... aa, ab, ac, ad, ae ........ ba, bb, bc, bd, .... aaa, aab, aac, aad usw. – Toad

3

Verwenden Sie das Datum selbst mit druckbaren ASCII-Zeichen codiert werden: 01/01/2009 ist eine durchaus akzeptable Barcode unter dem Barcode Code39.

Wenn Sie ein wenig Verarbeitungslogik beim Lesen nicht stören, können Sie Dinge wie entfernen Sie das "/" oder was auch immer Trennzeichen Sie verwenden.

Im Grunde würden Sie so etwas wie "01012009" in den Barcode kodieren und dann den Dekodierungsprozess einfach die ersten beiden Zahlen als den Monat, die nächsten zwei als den Tag und die letzten vier als das Jahr lesen lassen. Da sie gerade ascii sind, wird es ohne wirklich harte Verarbeitung funktionieren.

Eine zweite Alternative ist, dass Sie den 01. Januar 2009 als Ihr "0" -Datum haben und dann nur die Anzahl der Tage seither kodieren. Bei dem Entschlüsselungsprozess wäre es, die Nummer zu lesen und dann diese vielen Tage zum 1.1.2009 hinzuzufügen. Das würde funktionieren, wenn Jan/5/2009 als "4" kodiert wäre, wenn Sie das Datum wieder auslesen möchten, würden Sie 4 zu Jan/1/09 hinzufügen, um Jan/5/09 zu bekommen.

+3

Wenn Sie den 8-stelligen Datumsspeicher verwenden, ist es sinnvoll, ihn als yyyymmdd zu speichern, um ihn lesbar, sortierbar und fehlerfrei zu machen. 9999 – Hardryv