日期:2014-05-16  浏览次数:20470 次

这JB代码到底想干嘛?

$ln = $this->lengthIndicator($this->QR_MODE_NM, $this->version);
$dif = $this->estimateBitsModeNum($run) + 4 + $ln
+ $this->estimateBitsMode8(1)         // + 4 + l8
- $this->estimateBitsMode8($run + 1); // - 4 - l8
if ($dif > 0) {
return $this->eat8();
}

function estimateBitsModeNum($size) {
$w = (int)$size / 3;
$bits = $w * 10;
switch($size - $w * 3) {
case 1: {
$bits += 4;
break;
}
case 2: {
$bits += 7;
break;
}
default: {
break;
}
}
return $bits;
}

function estimateBitsMode8($size) {
return $size * 8;
}


function lengthIndicator($mode, $version) {
if ($mode == $this->QR_MODE_ST) {
return 0;
}
if ($version <= 9) {
$l = 0;
} elseif ($version <= 26) {
$l = 1;
} else {
$l = 2;
}
return $this->lengthTableBits[$mode][$l];
}

$lengthTableBits = array(
array(10, 12, 14),
array( 9, 11, 13),
array( 8, 16, 16),
array( 8, 10, 12)
);

------解决方案--------------------
不懂二维码的原理,看代码能看懂么?
Numeric mode 数字编码,从0到9。如果需要编码的数字的个数不是3的倍数,那么,最后剩下的1或2位数会被转成4或7bits,则其它的每3位数字会被编成 10,12,14bits    对应你的estimateBitsModeNum
不同version下编码的位数:
对应你的lengthIndicator

我也不懂,帮你找的资料: http://coolshell.cn/articles/10590.html#jtss-tsina