delete from hateblo.jp where 1=1;

タイトルに意味はありません。

QRコードの各バージョンにおけるデータ格納量

Version1〜2を除いて積み上げで計算が可能

Versionが7の倍数の場合

以下の式で増加分を計算できる

((version/7)*22)+5

ただし、versionが7のときは上記から-3しないと数値が一致しないので注意が必要。

Versionが7の倍数以外の場合

以下の式で増加分を計算できる

version*4+14

まとめ

JavaScriptでロジックにすると以下のようになる

function _getByteCount(ver){
	var _ret = 0;
	for(var i=1;i<=ver;i++){
		if(i==1){
			_ret += 26;
		} else if(i==2){
			_ret += 18;
		} else if((i%7)==0){
			_ret += ((i/7)*22);
			if(i<=7){
				_ret += 2;
			} else {
				_ret += 5;
			}
		} else {
			_ret += i*4+14;
		}
	}
	return _ret;
}
テストコード
$(document).ready(function (){
	module("QR Byte length");
	test("Calc rsEncode",function(){
		same(_getByteCount(1) ,26,'bytes per version');
		same(_getByteCount(2) ,44,'bytes per version');
		same(_getByteCount(3) ,70,'bytes per version');
		same(_getByteCount(4) ,100,'bytes per version');
		same(_getByteCount(5) ,134,'bytes per version');
		same(_getByteCount(6) ,172,'bytes per version');
		same(_getByteCount(7) ,196,'bytes per version');
		same(_getByteCount(8) ,242,'bytes per version');
		same(_getByteCount(9) ,292,'bytes per version');
		same(_getByteCount(10),346,'bytes per version');
		same(_getByteCount(11),404,'bytes per version');
		same(_getByteCount(12),466,'bytes per version');
		same(_getByteCount(13),532,'bytes per version');
		same(_getByteCount(14),581,'bytes per version');
		same(_getByteCount(15),655,'bytes per version');
		same(_getByteCount(16),733,'bytes per version');
		same(_getByteCount(17),815,'bytes per version');
		same(_getByteCount(18),901,'bytes per version');
		same(_getByteCount(19),991,'bytes per version');
		same(_getByteCount(20),1085,'bytes per version');
		same(_getByteCount(21),1156,'bytes per version');
		same(_getByteCount(22),1258,'bytes per version');
		same(_getByteCount(23),1364,'bytes per version');
		same(_getByteCount(24),1474,'bytes per version');
		same(_getByteCount(25),1588,'bytes per version');
		same(_getByteCount(26),1706,'bytes per version');
		same(_getByteCount(27),1828,'bytes per version');
		same(_getByteCount(28),1921,'bytes per version');
		same(_getByteCount(29),2051,'bytes per version');
		same(_getByteCount(30),2185,'bytes per version');
		same(_getByteCount(31),2323,'bytes per version');
		same(_getByteCount(32),2465,'bytes per version');
		same(_getByteCount(33),2611,'bytes per version');
		same(_getByteCount(34),2761,'bytes per version');
		same(_getByteCount(35),2876,'bytes per version');
		same(_getByteCount(36),3034,'bytes per version');
		same(_getByteCount(37),3196,'bytes per version');
		same(_getByteCount(38),3362,'bytes per version');
		same(_getByteCount(39),3532,'bytes per version');
		same(_getByteCount(40),3706,'bytes per version');
	});
});
実行結果
(NG,OK,total)
QR Byte length module: Calc rsEncode (0, 40, 40)
bytes per version: 26
bytes per version: 44
bytes per version: 70
bytes per version: 100
bytes per version: 134
bytes per version: 172
bytes per version: 196
bytes per version: 242
bytes per version: 292
bytes per version: 346
bytes per version: 404
bytes per version: 466
bytes per version: 532
bytes per version: 581
bytes per version: 655
bytes per version: 733
bytes per version: 815
bytes per version: 901
bytes per version: 991
bytes per version: 1085
bytes per version: 1156
bytes per version: 1258
bytes per version: 1364
bytes per version: 1474
bytes per version: 1588
bytes per version: 1706
bytes per version: 1828
bytes per version: 1921
bytes per version: 2051
bytes per version: 2185
bytes per version: 2323
bytes per version: 2465
bytes per version: 2611
bytes per version: 2761
bytes per version: 2876
bytes per version: 3034
bytes per version: 3196
bytes per version: 3362
bytes per version: 3532
bytes per version: 3706
参考文献