Кодирование даты в штрих-код ASCII - PullRequest
0 голосов
/ 07 августа 2009

Я изучаю кодирование информации о дате в линейный штрих-код, который должен быть как можно короче. Одна идея, которая у нас была, - это кодирование информации о дате, а не использование символов ASCII для чисел даты.

  1. Самая ранняя дата для кодирования - 01 января 2009 г.
  2. Дата должна быть закодирована с использованием печатных символов ASCII

Ответы [ 2 ]

3 голосов
/ 07 августа 2009

Если важна только дата (не время):

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

Чтобы закодировать это число как печатную последовательность символов ascii chars (ascii 48-127), выполните следующее

псевдокод:

 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 ;
 }

этот способ кодирования самый плотный. Так как он кодирует до 96 дней в будущем всего за 2 символа. 9216 дней, в 3 знака, 884736 дней в 4 знака.

3 голосов
/ 07 августа 2009

Используйте саму дату: 01/01/2009 является совершенно приемлемым штрих-кодом под штрих-кодом в стиле Code39.

Если вы не возражаете против некоторой логики обработки во время чтения, тогда вы можете сделать такие вещи, как удалить символ "/" или любой другой символ разделителя, который вы используете.

По сути, вы бы закодировали что-то вроде «01012009» в штрих-код, а затем запустили процесс декодирования, просто прочитав первые два числа как месяц, следующие два как день, а последние 4 как год. Так как они прямые ascii, он будет работать без какой-либо действительно сложной обработки.

Вторая альтернатива - указать 01 января 2009 года в качестве даты «0», а затем просто кодировать количество дней с тех пор. В котором процесс декодирования должен был бы прочитать число, и затем добавить это много дней к 01.01.09. Это сработает так, что январь / 5/2009 будет закодирован как «4», затем, когда вы захотите прочитать дату обратно, вы добавите 4 к январю / 1/09, чтобы получить январь / 5/09.

...