質問

日付情報をできるだけ短くする必要がある線形バーコードにエンコードすることを検討しています。私たちが考えたアイデアの 1 つは、日付数値に ASCII 文字を使用するのではなく、日付情報をエンコードすることです。

  1. エンコードされる最も古い日付は 01-JAN-2009 です。
  2. 日付は印刷可能な ASCII 文字を使用してエンコードする必要があります
役に立ちましたか?

解決

日付のみの問題(ない時)の場合:

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

のASCII文字(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日間点で最大コードするからです。 4つの文字3つの文字、884736日9216日、

他のヒント

日付自体を使用します。2009年1月1日には、Code39のスタイルのバーコードの下に完全に受け入れバーコードである

あなたは、読み取り時の処理ロジックのビットを気にしないならば、あなたは物事はあなたが使用して「/」または任意の区切り文字を削除したいと行うことができます。

年と基本的には、バーコードの中に何かのように、「01012009」を符号化するだろうし、その後、デコード処理は、ちょうど、月のように最初の2つの数字を読んだことが、次の二つの日として、最後の4。彼らはまっすぐなASCIIをしているので、それがどの本当にハードに処理せずに動作します。

第二の代替は、あなたの「0」日付として01-JAN-2009を持って、その後、ちょうどその日からの日数を符号化することです。これで、復号化処理は、番号を読み、[1/1/09に多くの日数を追加することです。これは、あなたが戻って日付を読みたいと思ったときに、「4」、その後、あなたは月/ 5月9日を取得するために、月/ 1月9日に4を追加したいとヤン/ 10/2009、符号化されるだろう、ということに働くだろう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top