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