2012年3月31日土曜日

PSVITAでバーコードのチェックデジット計算プログラムを作る

今回の記事も、PSVITA(プレイステーションヴィータ)でミニ・プログラミングをする話について書かせて頂きたいと思います。

最近は連続してヴィータでプログラミングする話になっていますが、一人のヴィータ好きの微熱だなぁと思ってご容赦願うばかりです・・・

しかし、ヴィータは全然売れていないけど、それは無関係にホント好き。だいいち、発売後間もないのに、ここまでスポーツやアクションなどゲームが充実している上に、本体だけあればミニプログラムも楽しめるというのは、やっぱり大きい。
ちょうどWindows8 consumer previewを本格的に使用開始した時期と重なったので、個人的に双方にとてつもない「好き」の相乗効果が生まれていますぞ。

■バーコードのチェックデジット算出プログラム■

今回は、バーコードのチェックデジット算出プログラムをヴィータで作ってみました。

モジュラス10ウェイト3方式対応です。
よくJANコードってバーコードありますよね。あの数字ってデタラメに13桁(8桁版もありますが)並べているわけではないんです。最後の一桁が「チェックデジット」という、まぁ平たく言うと暗号になっているのです。
つまり本文12桁+チェックデジット1桁というフォーマットになってます。

要するにテキトーに13桁の数字を並べてバーコードを印刷しても、バーコードスキャナは読まないのです。
チェックデジットを求めて、末尾にくっつけてあげて、その数字でもって印刷したバーコードなら読んでくれるわけです。
物流関係のプログラム開発なんかに携わると、不可避のチェックデジット。手元で簡単に計算出来る計算機としてヴィータを使いたいなぁと。
あ、入力する数列は何桁でも良いです。ただコードを短くするために入力チェックは省いていますけど。

プログラムは以下のようになります。
実際にヴィータに入力する時は、インデントも改行も一切なしで一行で入力します。改行コードの"¥r¥n"はヴィータでは¥をバックスラッシュ記号にして入力します。ソフトキーボードにはどっちも並んでいるんで迷うんですよね。

function f(v)
{
   var o=0,e=0,j=1,c,i;
   var r=prompt("PlayStation Vitaチェックデジット算出\r\n\r\nチェックデジットを求めたいバーコード数列を入力して下さい。(キャンセルで終了)",v);
   if(r==""||r==null||r==undefined)
   {
      return;
   }
   var s=new String(r);
   for(i=s.length-1;i!=-1;i--)
   {
      c=parseInt(s.charAt(i),10);
      if(j==1)
      {
         o+=c;
         j=0;
      }
      else
      {
         e+=c;
         j=1;
      }
   }
   e+=o*3;
   e=10-(e-Math.floor(e/10)*10);
   if(e==10)
   {
      e=0;
   }
   alert("ヴィータがお答えします。\r\n\r\n"+"チェックデジットは[ " + e + " ]です。\r\n全体バーコード数列="+r+e);
   f(r);
}
f("");
ちなみに、ヴィータの予測入力は大変素晴らしい仕事っぷりで、コード入力にも大活躍してくれています。
いくらヴィータのソフトキーボードが優秀と言ったって、今、この記事を書かせて頂いているWindows8 CP + 自作デスクトップPCのフルキーボードと比べると、入力速度は何倍違うかもはや分からないレベル。それはともかく、この学習結果とか、新しく買ったヴィータにも反映出来るといいんだけど。

■プログラム起動■

例によって、プログラムはブックマークから起動します。「ヴィータチェックデジット」って名前で登録しています。



■ヴィータ・パッケージのバーコードのチェックデジットを求めてみる■

実際にバーコードのチェックデジットを求めてみますが、「本当に正しいのか?」という検証も同時にやりたいので、現物のバーコードを使って計算結果を出してみますね。
使うのは、ヴィータのパッケージに印刷されているバーコードが一番良いかな。やっぱり。
あれのバーコードの数字は「4948872412858」です。
本文の494887241285をヴィータに入力して「8」が求められればOKという事になりますね。では実際にやってみます。


プログラムを起動して、「494887241285」を入力します。ここで「OK」を押して「8」が求められるはず・・・。

「494887241285」から、ちゃんとチェックデジット「8」が求められました。
この数字でバーコードを印刷すると、スキャナでちゃんと読めるものになるわけです。
ちなみに、例によってプログラムは一回毎に終了したりせず、前回の入力内容を復元した上で繰り返されます。終了は「キャンセル」です。

それにつけても、Windows8 CPとヴィータの組み合わせは、ホント嬉しいです。
大好きなマイクロソフト、Google、ソニー、そしてWindowsとヴィータOSが協調しているのかと思うと目頭が感動で熱くなります。
なんかこう、よーしやるぞって一日の始まりに元気が出まくりですよね。