2011-01-18 9 views
2

私は印刷されたqrコードを使用してデータベースレコードで実際のオブジェクトを識別するアプリケーションがあります。GUIDを36文字のアルファベット0-9とA-Zを使用して短い文字列に変換

データベースでは、GUIDを主キーとして使用します(これは、時折接続されるシステムであるため、これはネゴシエートできません)。

qrコードを可能な限り小さくするために、32文字の16進数のGUIDを、36文字のアルファベット(0-9およびA-Z)を英数字のqrコードで利用できる短い文字列に変換しようとしています。

全体の基本的な変換が私の頭を越えているので、どんな助けでも大歓迎です。

答えて

2

GUIDをバイト配列として格納し、Base32に変換できます。

こちらもご覧ください。related question

+0

文字列を短くしたいと考えています。これらのリンクで説明されているメソッドは、文字列を長くします。 – Oscar

+2

@Oscar:GUIDを文字列として処理する必要はありません。バイトシーケンスとして扱うことができるので、16バイトにしてからBase32に変換し、16進表現よりも文字数が少なくなります。 – sharptooth

1

Base32よりも約20%小さいBase64に変換します。 base64に変換するライブラリまたはサンプルコードは、すぐに利用できます。 Base64の唯一の問題は明らかに、文字 'a'と 'A'がBase64によって異なりますが、必ずしもDBには異なるので、Base64でBase64を選択すると、DBテーブルの照合順序が正しく設定してください。

+0

Base64は(MicrosoftがConvertクラスに入れているように)非常に簡単な変換であるようですが、残念ながら私は0-9とA-Zの文字のみをカバーするqrコードのアルファベットが残っています。ありがとう – Andy

0

グローバル一意識別子(GUID)の値は、32文字の16進文字列で表すことができますが、通常は128ビット(16バイト)の整数として格納されます。

私は、このような128ビット値を格納できる最小限のQRコードは、 "バイナリ/バイトエンコーディング"(任意の8ビットバイトを格納できる)を指定し、16バイトを直接格納することだと考えます。 ビットごとに1ピクセル、1バイトあたり8ピクセル(標準オーバーヘッドビットに加えて)でエンコードされます。 他のすべての有効なQRエンコーディングが、少なくとも1ビットあたり1ピクセルのを使用し、同じ標準オーバーヘッドを持つことは間違いありません。 したがって、あなたは、Base64またはBase45またはBase36またはBase32変換の任意の種類の小さいQRコードを取得するつもりはありません。

私が今までに見たQRコードのほとんどは、小文字をサポートするために同じ「バイナリ/バイトエンコーディング」を使用しています。 "英数字エンコーディング"を使用するQRコードは、私の経験ではあまり一般的ではありません。URLをエンコードするために使用されると、大文字の大文字にデコードされます(0〜9、A〜Z [大文字スペース]、$、%、*、+、 - 、。、/、:)を入力します。 "11ビット/ 2文字"は、多くの状況でかなり賢いですが、GUIDをエンコードする際にはあまり役に立ちません。

http://www.younoodle.com/startups/barcode_guidまたはWikipedia:spimeを見ましたか?

関連する問題