日付を ASCII バーコードにエンコードする
質問
日付情報をできるだけ短くする必要がある線形バーコードにエンコードすることを検討しています。私たちが考えたアイデアの 1 つは、日付数値に ASCII 文字を使用するのではなく、日付情報をエンコードすることです。
- エンコードされる最も古い日付は 01-JAN-2009 です。
- 日付は印刷可能な 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、符号化されるだろう、ということに働くだろう。