JANCODE-nicotan用 JANの数字をバーコード用ののフォント文字列に変換します

あなたのPCに保存できるようにしました(localStorage)

商品によく付いてるJANコードを計算して、自作したフォント(JANCODE-nicotan)専用の文字列に変換します

※ 2018年6月13日 『WEBで簡単なレジ』をご利用の際は localStorage が共有っぽいので全て削除には注意してください。
=> こちらをご利用ください
※ 2015年8月28日 ページと javascript を更新しましたのでページを更新してください

13桁のJANは3種類のバー、8桁は2種類のバーを使ってできています。
3種類のバーがあるためにキーボードの『0~9』と『A~J』『L~U』の大文字英数字に割り当てました。
決まった法則によって3種類のバーを使うため、そのままJANの数字を入力してもスキャンできるバーコードにはなりません。
そこで javascript を使ってスキャンできるような文字列に変換します。
※ キーボードの割り当ては こちら をご覧するんだ。

使い方
  1. 数字を入力する(8桁、13桁 チェックデジットがない7桁、12桁)
  2. 変換ボタンを押す
  3. 出てきた文字列が ピッ ってやるためのバーを表示するための羅列です。
  4. フォントをダウンロードしてインストール
    通常のフォントと同じです。わからない方は『フォント インストール』でぐぐってください。
  5. 変換された文字列を、ワードなりエクセルなりフォントを変えられるソフトで JANCODE-nicotan に変える
  6. バーコードが表示されます。大きさを調整してください。
ピッってできない場合
  • ごめん。
  • 8桁、13桁を入力してる場合は最後のチェックデジットが間違ってる可能性があります。
    あくまでも入力された数字をバーにしていますので、チェックデジットが合ってようが間違ってようが変換されます。
    7桁、12桁で入力してみてください。
    今後は8桁、13桁入力しても最後の桁を無視してチェックデジットを付与して変換するようにします。(2014年2月10日まだー)
■更新履歴
2017年9月8日: ブラウザFirefoxにおいて保存と読み込みがうまくいかなかったのを今頃修正しました。
 ローカルファイルの状態では正常に動作したのに、ウェブ上にアップするとNinja側でストレージに保存し、  保存した値を読み込む際にエラーをはいていました。
2015年8月28日: textareaでも保存ができるようにし、メモ欄を追加しました
 保存されたデータは1個ずつ入力の方にリストで表示されます
2015年8月23日: Javascriptのコードを修正しました。
2015年8月20日: JavascriptのlocalStorageを利用して保存するようにしました。
 テキストエリアの方も考え中。メモ欄もコピペできるようにすればどうかとか
2015年4月24日: Javascriptのコードを整理しました。
2014年12月28日: Javascriptのコードを配列式に変更しました。だいぶスッキリしたお!
2014年5月4日: 1個1個入力するよりエクセルのコピペが楽なんじゃないかと思い、textarea にしたものを追加しました。
2014年4月3日: Javascriptのコードを修正しました。
 変なことしないで12桁13桁→12桁、7桁8桁→7桁として計算すればよかっただけでした
2014年3月26日: 要望があった、2である時のスタートコードを追加しました。
 それに伴って、2だった場合の文字列を出すプログラムを変更しました。
2014年2月10日: まさかのチェックデジット対応w
 たぶん合ってるはずです。
 12桁を入力するとチェックデジットが付与された状態で文字列となります。
2013年12月8日: 8桁のJANコードに対応しました
2013年11月28日: 13桁のJANコードの文字列変換を公開
左側にJANコードの数字、右側には商品名などメモを入力してね(保存用)
    JANコード
    メモ

入力後変換ボタンを押してね!
 | 
↓変換された文字列がここに表示されます。コピーしやすいようにこんな感じにしました
    変換ボタンを押すとlocalStrageに保存されます。(このパソコンのブラウザ内。クッキーではない)

    (設定環境による?)ブラウザを閉じてもパソコンの電源を落としても保存されていますので、再度入力することなく取り出せます(仮)


    保存されていると自動的にリストが表示されます
    チェックを入れると下のボックスに表示されます。


    すべて削除する前にこちらをご利用ください

    エクセルからコピーしてきやすいように textarea にしてみました。


    ↓↓商品名などメモ  ↓↓真ん中はエクセルからコピーしたもの

    下の変換ボタンを押すと右側に文字列が表示されます。↑↑

     | 

    バーコード(JANコード)のフォントのダウンロード

    javascript ファイルのダウンロードはこちら

    2015年8月20日 保存できるようにしました
    ダウンロード:無料。conversion_JANCODE-nicotan3.js 右クリックして対象をファイルに保存を選んでね。
    バージョン:(2015.08.28)

    ダウンロード:無料。conversion_JANCODE-nicotan2.js 右クリックして対象をファイルに保存を選んでね。
    バージョン:(2015.04.24)

    ※ご利用に関して
    MIT ライセンス
    Copyright (c) 2014-2015 nicotan
    Released under the MIT license
    http://opensource.org/licenses/mit-license.php

    MIT ライセンスの全文の意訳の引用元
    http://sourceforge.jp/projects/opensource/wiki/licenses%2FMIT_license#h1-The.20MIT.20License

    The MIT License

    Copyright (c) year copyright holders
    以下に定める条件に従い、本ソフトウェアおよび関連文書のファイル(以下「ソフトウェア」)の複製を取得するすべての人に対し、ソフトウェアを無制限に扱うことを無償で許可します。

    これには、ソフトウェアの複製を使用、複写、変更、結合、掲載、頒布、サブライセンス、および/または販売する権利、およびソフトウェアを提供する相手に同じことを許可する権利も無制限に含まれます。

    上記の著作権表示および本許諾表示を、ソフトウェアのすべての複製または重要な部分に記載するものとします。
    ソフトウェアは「現状のまま」で、明示であるか暗黙であるかを問わず、何らの保証もなく提供されます。
    ここでいう保証とは、商品性、特定の目的への適合性、および権利非侵害についての保証も含みますが、それに限定されるものではありません。
    作者または著作権者は、契約行為、不法行為、またはそれ以外であろうと、ソフトウェアに起因または関連し、あるいはソフトウェアの使用またはその他の扱いによって生じる一切の請求、損害、その他の義務について何らの責任も負わないものとします。
    つまり Copyright ~の3行を使用箇所に書いてもらえればなにしても自由。ただ何かあっても責任は負わないです。

    ファイル名:conversion_JANCODE-nicotan3.js ソースコード (2015.08.20)

    // 2015.08.19-2015.08.28
    // localStorage
    // 2015.04.24
    // 整理しました
    // 2014.12.28
    // 配列に変えました
    //Copyright (c) 2014-2015 nicotan
    //Released under the MIT license
    //http://opensource.org/licenses/mit-license.php
    
    var INITIAL = ["000000","001011","001101","001110","010011","011001","011100","010101","010110","011010"];
    var STARTBAR = ["a","b","W","d","X","f","g","h","i","j"];
    var BAR = [
    	["0","1","2","3","4","5","6","7","8","9"],
    	["A","B","C","D","E","F","G","H","I","J"],
    	["L","M","N","O","P","Q","R","S","T","U"]
    ];
    function Conv() {
    	p( 0 , "");
    	namesInput = document.getElementsByName("iJ");
    	for ( n = 0 ; n < 10 ; n++) {
    		if ( namesInput[n].value != "" ) {
    			var ans = conversion( namesInput[n].value )
    			p( 1, "<li>" + ans + "</li>" );
    		var tmp = namesInput[n].value.replace(/[\"\'\\\<\>\{\}]/g,"");
    			jansave(n, namesInput[n].value, ans);
    		} else {
    			p( 1, "<li></li>" );
    		}
    	}
    }
    function conversion(n) {
    	if ( !isNaN( n ) ) {
    		len = n.length;
    		switch ( len ) {
    			case 7:
    				return Seven(n);
    			case 8:
    				return Seven(n);
    			case 12:
    				return Twelve(n);
    			case 13:
    				return Twelve(n);
    			default:
    				return "桁数がちがいます";
    		}
    	} else {
    		return "数値を入力してください。";
    	}
    }
    function jancd( strJancode ) {
    	var g = 0, k = 0, h = 0;
    	for ( i = 0 ; i < 12 ; i += 2 ) {
    		g += parseInt( strJancode.charAt( i + 1 ) );
    		k += parseInt( strJancode.charAt( i ) );
    	}
    	h = ( g * 3 + k ) % 10;
    	return h == 0 ? 0 : 10 - h ;
    }
    
    function Seven( n ) {
    	var strJanfont = "Y";
    	for ( i = 0 ; i < 4 ; i++ ) { strJanfont += n.charAt( i ); }
    	strJanfont = strJanfont + "K";
    	for ( i = 4 ; i < 7 ; i++ ) { strJanfont += BAR[2][parseInt( n.charAt( i ) )]; }
    	strJanfont += BAR[2][jancd("00000" + n)];
    	return strJanfont += "Z";
    }
    function Twelve(n){
    	var numIni = parseInt(n.charAt(0));
    	var strJanfont = STARTBAR[numIni];
    	for ( i = 0 ; i < 6 ; i++ ) { strJanfont += BAR[parseInt(INITIAL[numIni].charAt(i))][parseInt(n.charAt(i+1))]; }
    	strJanfont += "K";
    	for ( i = 7 ; i < 12 ; i++ ) { strJanfont += BAR[2][parseInt( n.charAt(i) )]; }
    	strJanfont += BAR[2][jancd( n )];
    	return strJanfont += "Z";
    }
    function setFocus(i, kc) {
    	if ( kc == 13 ) {
    		inputs = document.getElementsByName("iJ");
    		if ( inputs[i] != undefined ) {
    			inputs[i].focus();
    		}
    	}
    }
    function Clear() {
    	p( 0 , "" );
    	namesInput = document.getElementsByName("iJ");
    var memo = document.getElementsByName("memo");
    	for ( n = 0 ; n < 10 ; n++) {
    		 namesInput[n].value = "";
    		 memo[n].value = "";
    	}
    }
    function textArea() {
    // dom textarea id=taRight の中身を消す
    var idR = document.getElementById("taRight");
    	idR.value = "";
    // dom textarea id=taLeft の value を取得
    var idL = document.getElementById("taLeft");
    	t = idL.value;
    // 1本のテキストとして t に入ってるので改行コードで分割し配列にする
    var aCode = t.split(/\r\n|\r|\n/);
    // 最後が空白なら削除する
    	if ( aCode[aCode.length - 1] == "") {
    		aCode.pop();
    	}
    var idM = document.getElementById("taMemo");
    	memo = idM.value;
    	aMemo = memo.split(/\r\n|\r|\n/);
    // メモが途中まででも最大値を作成する
    	aMemo[aCode.length] = "";
    	// i メモ追加用
    var i = 0;
    	// 1個ずつ取り出して変換させる
    	aCode.forEach (
    		function textAreaRight(value) {
    			if ( !isNaN(value) ) {
    				if ( value != "") {
    					len = value.length;
    					switch ( len ) {
    						case 7:
    							str = Seven(value);
    							break;
    						case 8:
    							str = Seven(value);
    							break;
    						case 12:
    							str = Twelve(value);
    							break;
    						case 13:
    							str = Twelve(value);
    							break;
    						default:
    							str = "桁数が間違っています。";
    					}
    				} else {
    					str = "";
    				}
    			} else {
    				str = "数値を入力してください"
    			}
    			// ほぞん
    			var janmemo = "";
    			aMemo[i] == undefined ? janmemo = "" : janmemo = aMemo[i];
    			var tmp = str + ":" + janmemo;
    			localStorage.setItem(value, tmp);
    			i++;
    			// カキコ
    			idR.value += str + "\r\n";
    		}
    	);
    var html = aCode.length + "件の変換と保存が完了しました<br>";
    	ok_message( "ta_ok", html);
    }
    function ok_message(id, html){
    var elem = document.getElementById(id);
    	elem.innerHTML = html;
    }
    function ClearT() {
    // dom textarea id=taRight の中身を消す
    var idR = document.getElementById("taRight");
    	idR.value = "";
    // dom textarea id=taLeft の中身を消す
    var idL = document.getElementById("taLeft");
    	idL.value = "";
    var idM = document.getElementById("taMemo");
    	idM.value = "";
    	ok_message("ta_ok", "");
    }
    function p( type , Str ) {
    	obj = document.getElementById("Output");
    	switch ( type ) {
    		case 0:
    			obj.innerHTML = Str;
    			break;
    		case 1:
    			saved = obj.innerHTML;
    			obj.innerHTML = saved + Str;
    			break;
    	}
    }
    function jansave( i, key, value ) {
    var obj = document.getElementsByName("memo");
    	value = value + ":" + obj[i].value;
    	localStorage.setItem(key, value);
    }
    function janload() {
    var obj = document.getElementById("print");
    	obj.innerHTML = "";
    var print_m = document.getElementById("print_memo");
    var print_f = document.getElementById("print_fontstr");
    	print_m.value = "";
    	print_f.value = "";
    var html = "";
    	html += "<ul class=\"ulsaved\">";
    	if ( localStorage.length != 0) {
    		for ( var i = 0; i < localStorage.length; i++ ) {
    			var key = localStorage.key(i);
    			var value = localStorage.getItem( key );
    			var tmp = value.split(":");
    			var str = tmp[0];
    			var memo = tmp[1].replace(/[\"\'\<\>]/g,""); // "
    			var checkbox = "<li><input type=\"checkbox\" name=\"selectjan\" jan=\"" + key + "\" value=\"" + str + "\" memo=\"" + memo + "\" onclick=\"print_fontstr();\">";
    			html += checkbox + key + ":" + memo + " => " + str + "";
    		}
    		html += "<ul>";
    		obj.innerHTML = html;
    	}
    }
    
    function print_fontstr() {
    var obj = document.getElementsByName("selectjan");
    var print_m = document.getElementById("print_memo");
    var print_f = document.getElementById("print_fontstr");
    	print_m.value = "";
    	print_f.value = "";
    	if ( obj[0] != undefined ) {
    		for ( i = 0; i < obj.length; i++ ) {
    			if ( obj[i].checked ) {
    				print_m.value += obj[i].getAttribute("memo") + "\n";
    				print_f.value += obj[i].value + "\n";
    			}
    		}
    	}
    }
    function delete_localstorage(){
    var checkbox = document.getElementsByName("selectjan");
    	if ( confirm("選択したものを削除します") ) {
    		if ( checkbox[0] != undefined ) {
    			for ( i = 0; i < checkbox.length; i++ ) {
    				if ( checkbox[i].checked ) {
    					localStorage.removeItem( localStorage.key(i) );
    				}
    			}
    		}
    	}
    }
    function dis_delbtn(c) {
    var btndel = document.getElementById("btndel");
    	if ( c.checked ) {
    		btndel.disabled = false;
    	} else {
    		btndel.disabled = true;
    	}
    }
    function all_delete() {
    	if ( confirm("保存されているJANコードをすべて削除します(localStorage.clear())") ) {
    		localStorage.clear();
    	}
    }
    window.onload = function() {
    	janload();
    var c = document.getElementById("c_dis");
    	c.checked = false;
    	dis_delbtn(c);
    }
    			

    ファイル名:conversion_JANCODE-nicotan2.js ソースコード (2015.04.24)

    // 2015.04.24
    // 整理しました
    // 2014.12.28
    // 配列に変えました
    //Copyright (c) 2014-2015 nicotan
    //Released under the MIT license
    //http://opensource.org/licenses/mit-license.php
    
    var INITIAL = ["000000","001011","001101","001110","010011","011001","011100","010101","010110","011010"];
    var STARTBAR = ["a","b","W","d","X","f","g","h","i","j"];
    var BAR = [
    	["0","1","2","3","4","5","6","7","8","9"],
    	["A","B","C","D","E","F","G","H","I","J"],
    	["L","M","N","O","P","Q","R","S","T","U"]
    ];
    function Conv() {
    	p( 0 , "");
    	namesInput = document.getElementsByName("iJ");
    	for ( n = 0 ; n < 10 ; n++) {
    		if ( namesInput[n].value != "" ) {
    			p( 1, "<li>" + conversion( namesInput[n].value ) + "</li>" );
    		} else {
    			p( 1, "<li></li>" );
    		}
    	}
    }
    function conversion(n) {
    	if ( !isNaN( n ) ) {
    		len = n.length;
    		switch ( len ) {
    			case 7:
    				return Seven(n);
    			case 8:
    				return Seven(n);
    			case 12:
    				return Twelve(n);
    			case 13:
    				return Twelve(n);
    			default:
    				return "桁数がちがいます";
    		}
    	} else {
    		return "数値を入力してください。";
    	}
    }
    function jancd( strJancode ) {
    	var g = 0, k = 0, h = 0;
    	for ( i = 0 ; i < 12 ; i += 2 ) {
    		g += parseInt( strJancode.charAt( i + 1 ) );
    		k += parseInt( strJancode.charAt( i ) );
    	}
    	h = ( g * 3 + k ) % 10;
    	return h == 0 ? 0 : 10 - h ;
    }
    
    function Seven( n ) {
    	var strJanfont = "Y";
    	for ( i = 0 ; i < 4 ; i++ ) { strJanfont += n.charAt( i ); }
    	strJanfont = strJanfont + "K";
    	for ( i = 4 ; i < 7 ; i++ ) { strJanfont += BAR[2][parseInt( n.charAt( i ) )]; }
    	strJanfont += BAR[2][jancd("00000" + n)];
    	return strJanfont += "Z";
    }
    function Twelve(n){
    	var numIni = parseInt(n.charAt(0));
    	var strJanfont = STARTBAR[numIni];
    	for ( i = 0 ; i < 6 ; i++ ) { strJanfont += BAR[parseInt(INITIAL[numIni].charAt(i))][parseInt(n.charAt(i+1))]; }
    	strJanfont += "K";
    	for ( i = 7 ; i < 12 ; i++ ) { strJanfont += BAR[2][parseInt( n.charAt(i) )]; }
    	strJanfont += BAR[2][jancd( n )];
    	return strJanfont += "Z";
    }
    function setFocus(i, kc) {
    	if ( kc == 13 ) {
    		inputs = document.getElementsByName("iJ");
    		if ( inputs[i] != undefined ) {
    			inputs[i].focus();
    		}
    	}
    }
    function Clear() {
    	p( 0 , "" );
    	namesInput = document.getElementsByName("iJ");
    	for ( n = 0 ; n < 10 ; n++) {
    		 namesInput[n].value = ""
    	}
    }
    function textArea() {
    	// dom textarea id=taRight の中身を消す
    	var idR = document.getElementById("taRight");
    		idR.value = "";
    	// dom textarea id=taLeft の value を取得
    	var idL = document.getElementById("taLeft");
    		t = idL.value;
    	// 1本のテキストとして t に入ってるので改行コードで分割し配列にする
    	var aCode = t.split("\n");
    	// 最後が空白なら削除する
    	if ( aCode[aCode.length - 1] == "") {
    		aCode.pop();
    	}
    	// 1個ずつ取り出して変換させる
    	aCode.forEach (
    		function textAreaRight(value) {
    			if ( !isNaN(value) ) {
    				if ( value != "") {
    					len = value.length;
    					switch ( len ) {
    						case 7:
    							str = Seven(value);
    							break;
    						case 8:
    							str = Seven(value);
    							break;
    						case 12:
    							str = Twelve(value);
    							break;
    						case 13:
    							str = Twelve(value);
    							break;
    						default:
    							str = "桁数が間違っています。";
    					}
    				} else {
    					str = "";
    				}
    			} else {
    				str = "数値を入力してください"
    			}
    			// カキコ
    			idR.value = idR.value + str + "\r\n";
    		}
    	);
    }
    function ClearT() {
    	// dom textarea id=taRight の中身を消す
    	var idR = document.getElementById("taRight");
    		idR.value = "";
    	// dom textarea id=taLeft の中身を消す
    	var idL = document.getElementById("taLeft");
    		idL.value = "";
    }
    function p( type , Str ) {
    	obj = document.getElementById("Output");
    	switch ( type ) {
    		case 0:
    			obj.innerHTML = Str;
    			break;
    		case 1:
    			saved = obj.innerHTML;
    			obj.innerHTML = saved + Str;
    			break;
    	}
    }