protected function getErrorCorrectionLevel($ecl, $numcw)
{
// get maximum correction level
$maxecl = 8;
// starting error level
$maxerrsize = 928 - $numcw;
// available codewords for error
while ($maxecl > 0) {
$errsize = 0;
if ($ecl >= 0) {
// Avoid PHP7 ArithmeticError
$errsize = 2 << $ecl;
}
if ($maxerrsize >= $errsize) {
break;
}
--$maxecl;
}
// check for automatic levels
if ($ecl < 0 or $ecl > 8) {
if ($numcw < 41) {
$ecl = 2;
} elseif ($numcw < 161) {
$ecl = 3;
} elseif ($numcw < 321) {
$ecl = 4;
} elseif ($numcw < 864) {
$ecl = 5;
} else {
$ecl = $maxecl;
}
}
if ($ecl > $maxecl) {
$ecl = $maxecl;
}
return $ecl;
}