2009-08-07 2 views
0

나는 가능한 한 짧아야하는 선형 바코드로 날짜 정보 인코딩을 조사하고 있습니다. 우리가 가진 한 가지 아이디어는 날짜 숫자에 ASCII 문자를 사용하는 대신 날짜 정보를 인코딩하는 것입니다.날짜를 ASCII 바코드로 인코딩하기

  1. 인코딩 할 수있는 가장 빠른 날짜는 01-JAN-2009
  2. 날짜 인쇄 가능한 ASCII 문자

답변

3

날짜 만 문제 (안 시간) 경우 :

:

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

의사 코드를 다음을 수행 아스키 문자 (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 ; 
} 

이 인코딩 방법은 가장 밀도가 높습니다. 이후 그것은 단지 2 문자로 미래에 96 일까지 인코딩합니다. 9216 일, 3 자로, 884736 일 (4 자).

+0

을 통해 읽기 쉽고 정렬 가능하고 오류가 없도록 만듭니다. 위의 아이디어보다 더 견고하지만 24 시간 만에 도달하는 것 같습니다. 미래 3 문자로 년. 내가 뭐 잘못 생각한거야? –

+0

예 ... 모든 캐릭터와 함께 시간이 96 위로 올라갑니다. 따라서 예를 들어 8 문자는 96^7 일 = 205876021399 년을 의미합니다. 그래서 그것은 미래의 증거라고 생각합니다 ^) – Toad

+0

더 나은 시각화 ... 십진법은 기본 10을 사용합니다. 16 진법은 기본 16을 사용합니다.이 방법은 기본 96 (인쇄 가능한 ASCII 문자 96 개)을 사용합니다. 카운팅은 이렇게 바뀝니다. a, b, c, ..... aa, ab, ac, ad, ae ........ ba, bb, bc, bd, .... ..... .aaa, aab, aac, aad etc – Toad

3

사용 날짜 자체를 사용하여 인코딩해야합니다 2009년 1월 1일가 완벽하게 허용 바코드입니다 코드 39 스타일 바코드로

읽는 동안 약간의 논리 처리가 필요하다면 "/"또는 사용하는 구분 문자를 제거하는 등의 작업을 수행 할 수 있습니다.

기본적으로 "01012009"와 같은 코드를 바코드에 인코딩 한 다음 디코드 프로세스에서 처음 두 숫자를 월로, 다음 두 숫자를 하루로, 다음 두 숫자를 일로, 마지막 4 자리를 연도로 읽게합니다. 그들은 똑같은 ascii이므로 어떤 어려운 처리도없이 작동 할 것입니다.

두 번째 대안은 2009 년 1 월 1 일을 "0"날짜로 사용하고 그 이후의 일수를 인코딩하는 것입니다. 디코딩 프로세스에서 번호를 읽은 다음 1/1/09에 여러 날을 추가합니다. 이것은 2009 년 1 월 5 일이 "4"로 인코딩 될 것입니다. 그러면 날짜를 다시 읽고 싶을 때 Jan/1/09에 4를 추가하여 1 월/5 월 9 일을 얻습니다.

+3

8 자리 날짜 저장을 사용하는 경우 yyyymmdd로 저장하는 것이 좋습니다. 9999 – Hardryv