ILIAS  release_4-4 Revision
All Data Structures Namespaces Files Functions Variables Modules Pages
QRcode Class Reference

Class to create QR-code arrays for TCPDF class. More...

+ Collaboration diagram for QRcode:

Public Member Functions

 __construct ($code, $eclevel='L')
 This is the class constructor. More...
 
 getBarcodeArray ()
 Returns a barcode array which is readable by TCPDF. More...
 

Protected Member Functions

 binarize ($frame)
 Convert the frame in binary form. More...
 
 encodeString ($string)
 Encode the input string to QR code. More...
 
 encodeMask ($mask)
 Encode mask. More...
 
 setFrameAt ($at, $val)
 Set frame value at specified position. More...
 
 getFrameAt ($at)
 Get frame value at specified position. More...
 
 getNextPosition ()
 Return the next frame position. More...
 
 init ($spec)
 Initialize code. More...
 
 getCode ()
 Return Reed-Solomon block code. More...
 
 writeFormatInformation ($width, &$frame, $mask, $level)
 Write Format Information on frame and returns the number of black bits. More...
 
 mask0 ($x, $y)
 mask0 More...
 
 mask1 ($x, $y)
 mask1 More...
 
 mask2 ($x, $y)
 mask2 More...
 
 mask3 ($x, $y)
 mask3 More...
 
 mask4 ($x, $y)
 mask4 More...
 
 mask5 ($x, $y)
 mask5 More...
 
 mask6 ($x, $y)
 mask6 More...
 
 mask7 ($x, $y)
 mask7 More...
 
 generateMaskNo ($maskNo, $width, $frame)
 Return bitmask. More...
 
 makeMaskNo ($maskNo, $width, $s, &$d, $maskGenOnly=false)
 makeMaskNo More...
 
 makeMask ($width, $frame, $maskNo, $level)
 makeMask More...
 
 calcN1N3 ($length)
 calcN1N3 More...
 
 evaluateSymbol ($width, $frame)
 evaluateSymbol More...
 
 mask ($width, $frame, $level)
 mask More...
 
 isdigitat ($str, $pos)
 Return true if the character at specified position is a number. More...
 
 isalnumat ($str, $pos)
 Return true if the character at specified position is an alphanumeric character. More...
 
 identifyMode ($pos)
 identifyMode More...
 
 eatNum ()
 eatNum More...
 
 eatAn ()
 eatAn More...
 
 eatKanji ()
 eatKanji More...
 
 eat8 ()
 eat8 More...
 
 splitString ()
 splitString More...
 
 toUpper ()
 toUpper More...
 
 newInputItem ($mode, $size, $data, $bstream=null)
 newInputItem More...
 
 encodeModeNum ($inputitem, $version)
 encodeModeNum More...
 
 encodeModeAn ($inputitem, $version)
 encodeModeAn More...
 
 encodeMode8 ($inputitem, $version)
 encodeMode8 More...
 
 encodeModeKanji ($inputitem, $version)
 encodeModeKanji More...
 
 encodeModeStructure ($inputitem)
 encodeModeStructure More...
 
 encodeBitStream ($inputitem, $version)
 encodeBitStream More...
 
 appendNewInputItem ($items, $mode, $size, $data)
 Append data to an input object. More...
 
 insertStructuredAppendHeader ($items, $size, $index, $parity)
 insertStructuredAppendHeader More...
 
 calcParity ($items)
 calcParity More...
 
 checkModeNum ($size, $data)
 checkModeNum More...
 
 lookAnTable ($c)
 Look up the alphabet-numeric convesion table (see JIS X0510:2004, pp.19). More...
 
 checkModeAn ($size, $data)
 checkModeAn More...
 
 estimateBitsModeNum ($size)
 estimateBitsModeNum More...
 
 estimateBitsModeAn ($size)
 estimateBitsModeAn More...
 
 estimateBitsMode8 ($size)
 estimateBitsMode8 More...
 
 estimateBitsModeKanji ($size)
 estimateBitsModeKanji More...
 
 checkModeKanji ($size, $data)
 checkModeKanji More...
 
 check ($mode, $size, $data)
 Validate the input data. More...
 
 estimateBitStreamSize ($items, $version)
 estimateBitStreamSize More...
 
 estimateVersion ($items)
 estimateVersion More...
 
 lengthOfCode ($mode, $version, $bits)
 lengthOfCode More...
 
 createBitStream ($items)
 createBitStream More...
 
 convertData ($items)
 convertData More...
 
 appendPaddingBit ($bstream)
 Append Padding Bit to bitstream. More...
 
 mergeBitStream ($items)
 mergeBitStream More...
 
 getBitStream ($items)
 Returns a stream of bits. More...
 
 getByteStream ($items)
 Pack all bit streams padding bits into a byte array. More...
 
 allocate ($setLength)
 Return an array with zeros. More...
 
 newFromNum ($bits, $num)
 Return new bitstream from number. More...
 
 newFromBytes ($size, $data)
 Return new bitstream from bytes. More...
 
 appendBitstream ($bitstream, $append)
 Append one bitstream to another. More...
 
 appendNum ($bitstream, $bits, $num)
 Append one bitstream created from number to another. More...
 
 appendBytes ($bitstream, $size, $data)
 Append one bitstream created from bytes to another. More...
 
 bitstreamToByte ($bstream)
 Convert bitstream to bytes. More...
 
 qrstrset ($srctab, $x, $y, $repl, $replLen=false)
 Replace a value on the array at the specified position. More...
 
 getDataLength ($version, $level)
 Return maximum data code length (bytes) for the version. More...
 
 getECCLength ($version, $level)
 Return maximum error correction code length (bytes) for the version. More...
 
 getWidth ($version)
 Return the width of the symbol for the version. More...
 
 getRemainder ($version)
 Return the numer of remainder bits. More...
 
 getMinimumVersion ($size, $level)
 Return a version number that satisfies the input code length. More...
 
 lengthIndicator ($mode, $version)
 Return the size of length indicator for the mode and version. More...
 
 maximumWords ($mode, $version)
 Return the maximum length for the mode and version. More...
 
 getEccSpec ($version, $level, $spec)
 Return an array of ECC specification. More...
 
 putAlignmentMarker ($frame, $ox, $oy)
 Put an alignment marker. More...
 
 putAlignmentPattern ($version, $frame, $width)
 Put an alignment pattern. More...
 
 getVersionPattern ($version)
 Return BCH encoded version information pattern that is used for the symbol of version 7 or greater. More...
 
 getFormatInfo ($mask, $level)
 Return BCH encoded format information pattern. More...
 
 putFinderPattern ($frame, $ox, $oy)
 Put a finder pattern. More...
 
 createFrame ($version)
 Return a copy of initialized frame. More...
 
 newFrame ($version)
 Set new frame for the specified version. More...
 
 rsBlockNum ($spec)
 Return block number 0. More...
 
 rsBlockNum1 ($spec)
 Return block number 1. More...
 
 rsDataCodes1 ($spec)
 Return data codes 1. More...
 
 rsEccCodes1 ($spec)
 Return ecc codes 1. More...
 
 rsBlockNum2 ($spec)
 Return block number 2. More...
 
 rsDataCodes2 ($spec)
 Return data codes 2. More...
 
 rsEccCodes2 ($spec)
 Return ecc codes 2. More...
 
 rsDataLength ($spec)
 Return data length. More...
 
 rsEccLength ($spec)
 Return ecc length. More...
 
 init_rs ($symsize, $gfpoly, $fcr, $prim, $nroots, $pad)
 Initialize a Reed-Solomon codec and add it to existing rsitems. More...
 
 modnn ($rs, $x)
 modnn More...
 
 init_rs_char ($symsize, $gfpoly, $fcr, $prim, $nroots, $pad)
 Initialize a Reed-Solomon codec and returns an array of values. More...
 
 encode_rs_char ($rs, $data, $parity)
 Encode a Reed-Solomon codec and returns the parity array. More...
 

Protected Attributes

 $barcode_array = array()
 Barcode array to be returned which is readable by TCPDF. More...
 
 $version = 0
 QR code version. More...
 
 $level = QR_ECLEVEL_L
 Levels of error correction. More...
 
 $hint = QR_MODE_8B
 Encoding mode. More...
 
 $casesensitive = true
 Boolean flag, if true the input string will be converted to uppercase. More...
 
 $structured = 0
 Structured QR code (not supported yet). More...
 
 $data
 Mask data. More...
 
 $width
 Width. More...
 
 $frame
 Frame. More...
 
 $x
 X position of bit. More...
 
 $y
 Y position of bit. More...
 
 $dir
 Direction. More...
 
 $bit
 Single bit value. More...
 
 $datacode = array()
 Data code. More...
 
 $ecccode = array()
 Error correction code. More...
 
 $blocks
 Blocks. More...
 
 $rsblocks = array()
 Reed-Solomon blocks. More...
 
 $count
 Counter. More...
 
 $dataLength
 Data length. More...
 
 $eccLength
 Error correction length. More...
 
 $b1
 Value b1. More...
 
 $runLength = array()
 Run length. More...
 
 $dataStr = ''
 Input data string. More...
 
 $items
 Input items. More...
 
 $rsitems = array()
 Reed-Solomon items. More...
 
 $frames = array()
 Array of frames. More...
 
 $anTable
 Alphabet-numeric convesion table. More...
 
 $capacity
 Array Table of the capacity of symbols. More...
 
 $lengthTableBits
 Array Length indicator. More...
 
 $eccTable
 Array Table of the error correction code (Reed-Solomon block). More...
 
 $alignmentPattern
 Array Positions of alignment patterns. More...
 
 $versionPattern
 Array Version information pattern (BCH coded). More...
 
 $formatInfo
 Array Format information. More...
 

Detailed Description

Class to create QR-code arrays for TCPDF class.

QR Code symbol is a 2D barcode that can be scanned by handy terminals such as a mobile phone with CCD. The capacity of QR Code is up to 7000 digits or 4000 characters, and has high robustness. This class supports QR Code model 2, described in JIS (Japanese Industrial Standards) X0510:2004 or ISO/IEC 18004. Currently the following features are not supported: ECI and FNC1 mode, Micro QR Code, QR Code model 1, Structured mode.

This class is derived from "PHP QR Code encoder" by Dominik Dzienia (http://phpqrcode.sourceforge.net/) based on "libqrencode C library 3.1.1." by Kentaro Fukuchi (http://megaui.net/fukuchi/works/qrencode/index.en.html), contains Reed-Solomon code written by Phil Karn, KA9Q. QR Code is registered trademark of DENSO WAVE INCORPORATED (http://www.denso-wave.com/qrcode/index-e.html). Please read comments on this class source file for full copyright and license information.

Definition at line 291 of file qrcode.php.

Constructor & Destructor Documentation

◆ __construct()

QRcode::__construct (   $code,
  $eclevel = 'L' 
)

This is the class constructor.

Creates a QRcode object

Parameters
$code(string) code to represent using QRcode
$eclevel(string) error level:
  • L : About 7% or less errors can be corrected.
  • M : About 15% or less errors can be corrected.
  • Q : About 25% or less errors can be corrected.
  • H : About 30% or less errors can be corrected.
Since
1.0.000

Definition at line 639 of file qrcode.php.

References $barcode_array, $size, binarize(), and encodeString().

639  {
640  $barcode_array = array();
641  if ((is_null($code)) OR ($code == '\0') OR ($code == '')) {
642  return false;
643  }
644  // set error correction level
645  $this->level = array_search($eclevel, array('L', 'M', 'Q', 'H'));
646  if ($this->level === false) {
647  $this->level = QR_ECLEVEL_L;
648  }
649  if (($this->hint != QR_MODE_8B) AND ($this->hint != QR_MODE_KJ)) {
650  return false;
651  }
652  if (($this->version < 0) OR ($this->version > QRSPEC_VERSION_MAX)) {
653  return false;
654  }
655  $this->items = array();
656  $this->encodeString($code);
657  if (is_null($this->data)) {
658  return false;
659  }
660  $qrTab = $this->binarize($this->data);
661  $size = count($qrTab);
662  $barcode_array['num_rows'] = $size;
663  $barcode_array['num_cols'] = $size;
664  $barcode_array['bcode'] = array();
665  foreach ($qrTab as $line) {
666  $arrAdd = array();
667  foreach (str_split($line) as $char) {
668  $arrAdd[] = ($char=='1')?1:0;
669  }
670  $barcode_array['bcode'][] = $arrAdd;
671  }
672  $this->barcode_array = $barcode_array;
673  }
$size
Definition: RandomTest.php:79
binarize($frame)
Convert the frame in binary form.
Definition: qrcode.php:689
encodeString($string)
Encode the input string to QR code.
Definition: qrcode.php:704
$barcode_array
Barcode array to be returned which is readable by TCPDF.
Definition: qrcode.php:297
+ Here is the call graph for this function:

Member Function Documentation

◆ allocate()

QRcode::allocate (   $setLength)
protected

Return an array with zeros.

Parameters
$setLength(int) array size
Returns
array

Definition at line 2128 of file qrcode.php.

Referenced by newFromBytes(), and newFromNum().

2128  {
2129  return array_fill(0, $setLength, 0);
2130  }
+ Here is the caller graph for this function:

◆ appendBitstream()

QRcode::appendBitstream (   $bitstream,
  $append 
)
protected

Append one bitstream to another.

Parameters
$bitstream(array) original bitstream
$append(array) bitstream to append
Returns
array bitstream

Definition at line 2182 of file qrcode.php.

Referenced by appendBytes(), appendNum(), appendPaddingBit(), encodeBitStream(), and mergeBitStream().

2182  {
2183  if ((!is_array($append)) OR (count($append) == 0)) {
2184  return $bitstream;
2185  }
2186  if (count($bitstream) == 0) {
2187  return $append;
2188  }
2189  return array_values(array_merge($bitstream, $append));
2190  }
+ Here is the caller graph for this function:

◆ appendBytes()

QRcode::appendBytes (   $bitstream,
  $size,
  $data 
)
protected

Append one bitstream created from bytes to another.

Parameters
$bitstream(array) original bitstream
$size(int) size
$data(array) bytes
Returns
array bitstream

Definition at line 2214 of file qrcode.php.

References $data, $size, appendBitstream(), and newFromBytes().

Referenced by appendPaddingBit().

2214  {
2215  if ($size == 0) {
2216  return 0;
2217  }
2218  $b = $this->newFromBytes($size, $data);
2219  return $this->appendBitstream($bitstream, $b);
2220  }
$size
Definition: RandomTest.php:79
newFromBytes($size, $data)
Return new bitstream from bytes.
Definition: qrcode.php:2158
$data
Mask data.
Definition: qrcode.php:333
appendBitstream($bitstream, $append)
Append one bitstream to another.
Definition: qrcode.php:2182
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ appendNewInputItem()

QRcode::appendNewInputItem (   $items,
  $mode,
  $size,
  $data 
)
protected

Append data to an input object.

The data is copied and appended to the input object.

Parameters
$items(arrray) input items
$mode(int) encoding mode.
$size(int) size of data (byte).
$data(array) array of input data.
Returns
items

Definition at line 1695 of file qrcode.php.

References $data, $items, $size, and newInputItem().

Referenced by eat8(), eatAn(), eatKanji(), and eatNum().

1695  {
1696  $newitem = $this->newInputItem($mode, $size, $data);
1697  if (!empty($newitem)) {
1698  $items[] = $newitem;
1699  }
1700  return $items;
1701  }
$size
Definition: RandomTest.php:79
$items
Input items.
Definition: qrcode.php:443
$data
Mask data.
Definition: qrcode.php:333
newInputItem($mode, $size, $data, $bstream=null)
newInputItem
Definition: qrcode.php:1512
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ appendNum()

QRcode::appendNum (   $bitstream,
  $bits,
  $num 
)
protected

Append one bitstream created from number to another.

Parameters
$bitstream(array) original bitstream
$bits(int) number of bits
$num(int) number
Returns
array bitstream

Definition at line 2199 of file qrcode.php.

References appendBitstream(), and newFromNum().

Referenced by appendPaddingBit(), encodeMode8(), encodeModeAn(), encodeModeKanji(), encodeModeNum(), and encodeModeStructure().

2199  {
2200  if ($bits == 0) {
2201  return 0;
2202  }
2203  $b = $this->newFromNum($bits, $num);
2204  return $this->appendBitstream($bitstream, $b);
2205  }
newFromNum($bits, $num)
Return new bitstream from number.
Definition: qrcode.php:2138
appendBitstream($bitstream, $append)
Append one bitstream to another.
Definition: qrcode.php:2182
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ appendPaddingBit()

QRcode::appendPaddingBit (   $bstream)
protected

Append Padding Bit to bitstream.

Parameters
$bstream(array)
Returns
array bitstream

Definition at line 2054 of file qrcode.php.

References appendBitstream(), appendBytes(), appendNum(), and getDataLength().

Referenced by getBitStream().

2054  {
2055  if (is_null($bstream)) {
2056  return null;
2057  }
2058  $bits = count($bstream);
2059  $maxwords = $this->getDataLength($this->version, $this->level);
2060  $maxbits = $maxwords * 8;
2061  if ($maxbits == $bits) {
2062  return $bstream;
2063  }
2064  if ($maxbits - $bits < 5) {
2065  return $this->appendNum($bstream, $maxbits - $bits, 0);
2066  }
2067  $bits += 4;
2068  $words = (int)(($bits + 7) / 8);
2069  $padding = array();
2070  $padding = $this->appendNum($padding, $words * 8 - $bits + 4, 0);
2071  $padlen = $maxwords - $words;
2072  if ($padlen > 0) {
2073  $padbuf = array();
2074  for ($i=0; $i<$padlen; ++$i) {
2075  $padbuf[$i] = ($i&1)?0x11:0xec;
2076  }
2077  $padding = $this->appendBytes($padding, $padlen, $padbuf);
2078  }
2079  return $this->appendBitstream($bstream, $padding);
2080  }
appendNum($bitstream, $bits, $num)
Append one bitstream created from number to another.
Definition: qrcode.php:2199
getDataLength($version, $level)
Return maximum data code length (bytes) for the version.
Definition: qrcode.php:2283
appendBytes($bitstream, $size, $data)
Append one bitstream created from bytes to another.
Definition: qrcode.php:2214
appendBitstream($bitstream, $append)
Append one bitstream to another.
Definition: qrcode.php:2182
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ binarize()

QRcode::binarize (   $frame)
protected

Convert the frame in binary form.

Parameters
$frame(array) array to binarize
Returns
array frame in binary form

Definition at line 689 of file qrcode.php.

References $frame.

Referenced by __construct().

689  {
690  $len = count($frame);
691  // the frame is square (width = height)
692  foreach ($frame as &$frameLine) {
693  for ($i=0; $i<$len; $i++) {
694  $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0';
695  }
696  }
697  return $frame;
698  }
$frame
Frame.
Definition: qrcode.php:347
+ Here is the caller graph for this function:

◆ bitstreamToByte()

QRcode::bitstreamToByte (   $bstream)
protected

Convert bitstream to bytes.

Parameters
$bstream(array) original bitstream
Returns
array of bytes

Definition at line 2227 of file qrcode.php.

References $data, and $size.

Referenced by getByteStream().

2227  {
2228  if (is_null($bstream)) {
2229  return null;
2230  }
2231  $size = count($bstream);
2232  if ($size == 0) {
2233  return array();
2234  }
2235  $data = array_fill(0, (int)(($size + 7) / 8), 0);
2236  $bytes = (int)($size / 8);
2237  $p = 0;
2238  for ($i=0; $i<$bytes; $i++) {
2239  $v = 0;
2240  for ($j=0; $j<8; $j++) {
2241  $v = $v << 1;
2242  $v |= $bstream[$p];
2243  $p++;
2244  }
2245  $data[$i] = $v;
2246  }
2247  if ($size & 7) {
2248  $v = 0;
2249  for ($j=0; $j<($size & 7); $j++) {
2250  $v = $v << 1;
2251  $v |= $bstream[$p];
2252  $p++;
2253  }
2254  $data[$bytes] = $v;
2255  }
2256  return $data;
2257  }
$size
Definition: RandomTest.php:79
$data
Mask data.
Definition: qrcode.php:333
+ Here is the caller graph for this function:

◆ calcN1N3()

QRcode::calcN1N3 (   $length)
protected

calcN1N3

Parameters
$length(int)
Returns
int demerit

Definition at line 1126 of file qrcode.php.

Referenced by evaluateSymbol().

1126  {
1127  $demerit = 0;
1128  for ($i=0; $i<$length; ++$i) {
1129  if ($this->runLength[$i] >= 5) {
1130  $demerit += (N1 + ($this->runLength[$i] - 5));
1131  }
1132  if ($i & 1) {
1133  if (($i >= 3) AND ($i < ($length-2)) AND ($this->runLength[$i] % 3 == 0)) {
1134  $fact = (int)($this->runLength[$i] / 3);
1135  if (($this->runLength[$i-2] == $fact)
1136  AND ($this->runLength[$i-1] == $fact)
1137  AND ($this->runLength[$i+1] == $fact)
1138  AND ($this->runLength[$i+2] == $fact)) {
1139  if (($this->runLength[$i-3] < 0) OR ($this->runLength[$i-3] >= (4 * $fact))) {
1140  $demerit += N3;
1141  } elseif ((($i+3) >= $length) OR ($this->runLength[$i+3] >= (4 * $fact))) {
1142  $demerit += N3;
1143  }
1144  }
1145  }
1146  }
1147  }
1148  return $demerit;
1149  }
+ Here is the caller graph for this function:

◆ calcParity()

QRcode::calcParity (   $items)
protected

calcParity

Parameters
$items(array)
Returns
int parity

Definition at line 1729 of file qrcode.php.

References $items.

1729  {
1730  $parity = 0;
1731  foreach ($items as $item) {
1732  if ($item['mode'] != QR_MODE_ST) {
1733  for ($i=$item['size']-1; $i>=0; --$i) {
1734  $parity ^= $item['data'][$i];
1735  }
1736  }
1737  }
1738  return $parity;
1739  }
$items
Input items.
Definition: qrcode.php:443

◆ check()

QRcode::check (   $mode,
  $size,
  $data 
)
protected

Validate the input data.

Parameters
$mode(int) encoding mode.
$size(int) size of data (byte).
$data(array) data to validate
Returns
boolean true in case of valid data, false otherwise

Definition at line 1858 of file qrcode.php.

References $data, $size, checkModeAn(), checkModeKanji(), and checkModeNum().

Referenced by newInputItem().

1858  {
1859  if ($size <= 0) {
1860  return false;
1861  }
1862  switch($mode) {
1863  case QR_MODE_NM: {
1864  return $this->checkModeNum($size, $data);
1865  }
1866  case QR_MODE_AN: {
1867  return $this->checkModeAn($size, $data);
1868  }
1869  case QR_MODE_KJ: {
1870  return $this->checkModeKanji($size, $data);
1871  }
1872  case QR_MODE_8B: {
1873  return true;
1874  }
1875  case QR_MODE_ST: {
1876  return true;
1877  }
1878  default: {
1879  break;
1880  }
1881  }
1882  return false;
1883  }
checkModeAn($size, $data)
checkModeAn
Definition: qrcode.php:1771
$size
Definition: RandomTest.php:79
checkModeNum($size, $data)
checkModeNum
Definition: qrcode.php:1747
checkModeKanji($size, $data)
checkModeKanji
Definition: qrcode.php:1838
$data
Mask data.
Definition: qrcode.php:333
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ checkModeAn()

QRcode::checkModeAn (   $size,
  $data 
)
protected

checkModeAn

Parameters
$size(int)
$data(array)
Returns
boolean true or false

Definition at line 1771 of file qrcode.php.

References $data, $size, and lookAnTable().

Referenced by check().

1771  {
1772  for ($i=0; $i<$size; ++$i) {
1773  if ($this->lookAnTable(ord($data[$i])) == -1) {
1774  return false;
1775  }
1776  }
1777  return true;
1778  }
$size
Definition: RandomTest.php:79
lookAnTable($c)
Look up the alphabet-numeric convesion table (see JIS X0510:2004, pp.19).
Definition: qrcode.php:1761
$data
Mask data.
Definition: qrcode.php:333
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ checkModeKanji()

QRcode::checkModeKanji (   $size,
  $data 
)
protected

checkModeKanji

Parameters
$size(int)
$data(array)
Returns
boolean true or false

Definition at line 1838 of file qrcode.php.

References $data, and $size.

Referenced by check().

1838  {
1839  if ($size & 1) {
1840  return false;
1841  }
1842  for ($i=0; $i<$size; $i+=2) {
1843  $val = (ord($data[$i]) << 8) | ord($data[$i+1]);
1844  if (($val < 0x8140) OR (($val > 0x9ffc) AND ($val < 0xe040)) OR ($val > 0xebbf)) {
1845  return false;
1846  }
1847  }
1848  return true;
1849  }
$size
Definition: RandomTest.php:79
$data
Mask data.
Definition: qrcode.php:333
+ Here is the caller graph for this function:

◆ checkModeNum()

QRcode::checkModeNum (   $size,
  $data 
)
protected

checkModeNum

Parameters
$size(int)
$data(array)
Returns
boolean true or false

Definition at line 1747 of file qrcode.php.

References $data, and $size.

Referenced by check().

1747  {
1748  for ($i=0; $i<$size; ++$i) {
1749  if ((ord($data[$i]) < ord('0')) OR (ord($data[$i]) > ord('9'))){
1750  return false;
1751  }
1752  }
1753  return true;
1754  }
$size
Definition: RandomTest.php:79
$data
Mask data.
Definition: qrcode.php:333
+ Here is the caller graph for this function:

◆ convertData()

QRcode::convertData (   $items)
protected

convertData

Parameters
$items(array)
Returns
array items

Definition at line 2025 of file qrcode.php.

References $items, createBitStream(), estimateVersion(), and getMinimumVersion().

Referenced by mergeBitStream().

2025  {
2026  $ver = $this->estimateVersion($items);
2027  if ($ver > $this->version) {
2028  $this->version = $ver;
2029  }
2030  while (true) {
2031  $cbs = $this->createBitStream($items);
2032  $items = $cbs[0];
2033  $bits = $cbs[1];
2034  if ($bits < 0) {
2035  return -1;
2036  }
2037  $ver = $this->getMinimumVersion((int)(($bits + 7) / 8), $this->level);
2038  if ($ver < 0) {
2039  return -1;
2040  } elseif ($ver > $this->version) {
2041  $this->version = $ver;
2042  } else {
2043  break;
2044  }
2045  }
2046  return $items;
2047  }
estimateVersion($items)
estimateVersion
Definition: qrcode.php:1934
$items
Input items.
Definition: qrcode.php:443
createBitStream($items)
createBitStream
Definition: qrcode.php:2010
getMinimumVersion($size, $level)
Return a version number that satisfies the input code length.
Definition: qrcode.php:2321
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ createBitStream()

QRcode::createBitStream (   $items)
protected

createBitStream

Parameters
$items(array)
Returns
array of items and total bits

Definition at line 2010 of file qrcode.php.

References $items, $total, and encodeBitStream().

Referenced by convertData().

2010  {
2011  $total = 0;
2012  foreach ($items as $key => $item) {
2013  $items[$key] = $this->encodeBitStream($item, $this->version);
2014  $bits = count($items[$key]['bstream']);
2015  $total += $bits;
2016  }
2017  return array($items, $total);
2018  }
encodeBitStream($inputitem, $version)
encodeBitStream
Definition: qrcode.php:1640
$items
Input items.
Definition: qrcode.php:443
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ createFrame()

QRcode::createFrame (   $version)
protected

Return a copy of initialized frame.

Parameters
$version(int) version
Returns
Array of unsigned char.

Definition at line 2529 of file qrcode.php.

References $frame, $version, $width, $x, $y, getVersionPattern(), putAlignmentPattern(), putFinderPattern(), and qrstrset().

Referenced by newFrame().

2529  {
2530  $width = $this->capacity[$version][QRCAP_WIDTH];
2531  $frameLine = str_repeat ("\0", $width);
2532  $frame = array_fill(0, $width, $frameLine);
2533  // Finder pattern
2534  $frame = $this->putFinderPattern($frame, 0, 0);
2535  $frame = $this->putFinderPattern($frame, $width - 7, 0);
2536  $frame = $this->putFinderPattern($frame, 0, $width - 7);
2537  // Separator
2538  $yOffset = $width - 7;
2539  for ($y=0; $y < 7; ++$y) {
2540  $frame[$y][7] = "\xc0";
2541  $frame[$y][$width - 8] = "\xc0";
2542  $frame[$yOffset][7] = "\xc0";
2543  ++$yOffset;
2544  }
2545  $setPattern = str_repeat("\xc0", 8);
2546  $frame = $this->qrstrset($frame, 0, 7, $setPattern);
2547  $frame = $this->qrstrset($frame, $width-8, 7, $setPattern);
2548  $frame = $this->qrstrset($frame, 0, $width - 8, $setPattern);
2549  // Format info
2550  $setPattern = str_repeat("\x84", 9);
2551  $frame = $this->qrstrset($frame, 0, 8, $setPattern);
2552  $frame = $this->qrstrset($frame, $width - 8, 8, $setPattern, 8);
2553  $yOffset = $width - 8;
2554  for ($y=0; $y < 8; ++$y,++$yOffset) {
2555  $frame[$y][8] = "\x84";
2556  $frame[$yOffset][8] = "\x84";
2557  }
2558  // Timing pattern
2559  $wo = $width - 15;
2560  for ($i=1; $i < $wo; ++$i) {
2561  $frame[6][7+$i] = chr(0x90 | ($i & 1));
2562  $frame[7+$i][6] = chr(0x90 | ($i & 1));
2563  }
2564  // Alignment pattern
2566  // Version information
2567  if ($version >= 7) {
2568  $vinf = $this->getVersionPattern($version);
2569  $v = $vinf;
2570  for ($x=0; $x<6; ++$x) {
2571  for ($y=0; $y<3; ++$y) {
2572  $frame[($width - 11)+$y][$x] = chr(0x88 | ($v & 1));
2573  $v = $v >> 1;
2574  }
2575  }
2576  $v = $vinf;
2577  for ($y=0; $y<6; ++$y) {
2578  for ($x=0; $x<3; ++$x) {
2579  $frame[$y][$x+($width - 11)] = chr(0x88 | ($v & 1));
2580  $v = $v >> 1;
2581  }
2582  }
2583  }
2584  // and a little bit...
2585  $frame[$width - 8][8] = "\x81";
2586  return $frame;
2587  }
putFinderPattern($frame, $ox, $oy)
Put a finder pattern.
Definition: qrcode.php:2508
$version
QR code version.
Definition: qrcode.php:303
getVersionPattern($version)
Return BCH encoded version information pattern that is used for the symbol of version 7 or greater...
Definition: qrcode.php:2478
putAlignmentPattern($version, $frame, $width)
Put an alignment pattern.
Definition: qrcode.php:2438
$y
Y position of bit.
Definition: qrcode.php:359
qrstrset($srctab, $x, $y, $repl, $replLen=false)
Replace a value on the array at the specified position.
Definition: qrcode.php:2272
$width
Width.
Definition: qrcode.php:341
$frame
Frame.
Definition: qrcode.php:347
$x
X position of bit.
Definition: qrcode.php:353
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ eat8()

QRcode::eat8 ( )
protected

eat8

Returns
int run

Definition at line 1395 of file qrcode.php.

References appendNewInputItem(), estimateBitsMode8(), estimateBitsModeAn(), estimateBitsModeNum(), identifyMode(), isalnumat(), isdigitat(), and lengthIndicator().

Referenced by eatAn(), eatNum(), and splitString().

1395  {
1396  $la = $this->lengthIndicator(QR_MODE_AN, $this->version);
1397  $ln = $this->lengthIndicator(QR_MODE_NM, $this->version);
1398  $p = 1;
1399  $dataStrLen = strlen($this->dataStr);
1400  while($p < $dataStrLen) {
1401  $mode = $this->identifyMode($p);
1402  if ($mode == QR_MODE_KJ) {
1403  break;
1404  }
1405  if ($mode == QR_MODE_NM) {
1406  $q = $p;
1407  while($this->isdigitat($this->dataStr, $q)) {
1408  $q++;
1409  }
1410  $dif = $this->estimateBitsMode8($p) // + 4 + l8
1411  + $this->estimateBitsModeNum($q - $p) + 4 + $ln
1412  - $this->estimateBitsMode8($q); // - 4 - l8
1413  if ($dif < 0) {
1414  break;
1415  } else {
1416  $p = $q;
1417  }
1418  } elseif ($mode == QR_MODE_AN) {
1419  $q = $p;
1420  while($this->isalnumat($this->dataStr, $q)) {
1421  $q++;
1422  }
1423  $dif = $this->estimateBitsMode8($p) // + 4 + l8
1424  + $this->estimateBitsModeAn($q - $p) + 4 + $la
1425  - $this->estimateBitsMode8($q); // - 4 - l8
1426  if ($dif < 0) {
1427  break;
1428  } else {
1429  $p = $q;
1430  }
1431  } else {
1432  $p++;
1433  }
1434  }
1435  $run = $p;
1436  $this->items = $this->appendNewInputItem($this->items, QR_MODE_8B, $run, str_split($this->dataStr));
1437  return $run;
1438  }
estimateBitsModeAn($size)
estimateBitsModeAn
Definition: qrcode.php:1806
isdigitat($str, $pos)
Return true if the character at specified position is a number.
Definition: qrcode.php:1261
estimateBitsMode8($size)
estimateBitsMode8
Definition: qrcode.php:1819
appendNewInputItem($items, $mode, $size, $data)
Append data to an input object.
Definition: qrcode.php:1695
isalnumat($str, $pos)
Return true if the character at specified position is an alphanumeric character.
Definition: qrcode.php:1274
estimateBitsModeNum($size)
estimateBitsModeNum
Definition: qrcode.php:1785
identifyMode($pos)
identifyMode
Definition: qrcode.php:1286
lengthIndicator($mode, $version)
Return the size of length indicator for the mode and version.
Definition: qrcode.php:2338
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ eatAn()

QRcode::eatAn ( )
protected

eatAn

Returns
int run

Definition at line 1343 of file qrcode.php.

References appendNewInputItem(), eat8(), estimateBitsMode8(), estimateBitsModeAn(), estimateBitsModeNum(), isalnumat(), isdigitat(), and lengthIndicator().

Referenced by eatNum(), and splitString().

1343  {
1344  $la = $this->lengthIndicator(QR_MODE_AN, $this->version);
1345  $ln = $this->lengthIndicator(QR_MODE_NM, $this->version);
1346  $p =1 ;
1347  while($this->isalnumat($this->dataStr, $p)) {
1348  if ($this->isdigitat($this->dataStr, $p)) {
1349  $q = $p;
1350  while($this->isdigitat($this->dataStr, $q)) {
1351  $q++;
1352  }
1353  $dif = $this->estimateBitsModeAn($p) // + 4 + la
1354  + $this->estimateBitsModeNum($q - $p) + 4 + $ln
1355  - $this->estimateBitsModeAn($q); // - 4 - la
1356  if ($dif < 0) {
1357  break;
1358  } else {
1359  $p = $q;
1360  }
1361  } else {
1362  $p++;
1363  }
1364  }
1365  $run = $p;
1366  if (!$this->isalnumat($this->dataStr, $p)) {
1367  $dif = $this->estimateBitsModeAn($run) + 4 + $la
1368  + $this->estimateBitsMode8(1) // + 4 + l8
1369  - $this->estimateBitsMode8($run + 1); // - 4 - l8
1370  if ($dif > 0) {
1371  return $this->eat8();
1372  }
1373  }
1374  $this->items = $this->appendNewInputItem($this->items, QR_MODE_AN, $run, str_split($this->dataStr));
1375  return $run;
1376  }
estimateBitsModeAn($size)
estimateBitsModeAn
Definition: qrcode.php:1806
isdigitat($str, $pos)
Return true if the character at specified position is a number.
Definition: qrcode.php:1261
eat8()
eat8
Definition: qrcode.php:1395
estimateBitsMode8($size)
estimateBitsMode8
Definition: qrcode.php:1819
appendNewInputItem($items, $mode, $size, $data)
Append data to an input object.
Definition: qrcode.php:1695
isalnumat($str, $pos)
Return true if the character at specified position is an alphanumeric character.
Definition: qrcode.php:1274
estimateBitsModeNum($size)
estimateBitsModeNum
Definition: qrcode.php:1785
lengthIndicator($mode, $version)
Return the size of length indicator for the mode and version.
Definition: qrcode.php:2338
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ eatKanji()

QRcode::eatKanji ( )
protected

eatKanji

Returns
int run

Definition at line 1382 of file qrcode.php.

References appendNewInputItem(), and identifyMode().

Referenced by splitString().

1382  {
1383  $p = 0;
1384  while($this->identifyMode($p) == QR_MODE_KJ) {
1385  $p += 2;
1386  }
1387  $this->items = $this->appendNewInputItem($this->items, QR_MODE_KJ, $p, str_split($this->dataStr));
1388  return $run;
1389  }
appendNewInputItem($items, $mode, $size, $data)
Append data to an input object.
Definition: qrcode.php:1695
identifyMode($pos)
identifyMode
Definition: qrcode.php:1286
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ eatNum()

QRcode::eatNum ( )
protected

eatNum

Returns
int run

Definition at line 1311 of file qrcode.php.

References appendNewInputItem(), eat8(), eatAn(), estimateBitsMode8(), estimateBitsModeAn(), estimateBitsModeNum(), identifyMode(), isdigitat(), and lengthIndicator().

Referenced by splitString().

1311  {
1312  $ln = $this->lengthIndicator(QR_MODE_NM, $this->version);
1313  $p = 0;
1314  while($this->isdigitat($this->dataStr, $p)) {
1315  $p++;
1316  }
1317  $run = $p;
1318  $mode = $this->identifyMode($p);
1319  if ($mode == QR_MODE_8B) {
1320  $dif = $this->estimateBitsModeNum($run) + 4 + $ln
1321  + $this->estimateBitsMode8(1) // + 4 + l8
1322  - $this->estimateBitsMode8($run + 1); // - 4 - l8
1323  if ($dif > 0) {
1324  return $this->eat8();
1325  }
1326  }
1327  if ($mode == QR_MODE_AN) {
1328  $dif = $this->estimateBitsModeNum($run) + 4 + $ln
1329  + $this->estimateBitsModeAn(1) // + 4 + la
1330  - $this->estimateBitsModeAn($run + 1);// - 4 - la
1331  if ($dif > 0) {
1332  return $this->eatAn();
1333  }
1334  }
1335  $this->items = $this->appendNewInputItem($this->items, QR_MODE_NM, $run, str_split($this->dataStr));
1336  return $run;
1337  }
estimateBitsModeAn($size)
estimateBitsModeAn
Definition: qrcode.php:1806
eatAn()
eatAn
Definition: qrcode.php:1343
isdigitat($str, $pos)
Return true if the character at specified position is a number.
Definition: qrcode.php:1261
eat8()
eat8
Definition: qrcode.php:1395
estimateBitsMode8($size)
estimateBitsMode8
Definition: qrcode.php:1819
appendNewInputItem($items, $mode, $size, $data)
Append data to an input object.
Definition: qrcode.php:1695
estimateBitsModeNum($size)
estimateBitsModeNum
Definition: qrcode.php:1785
identifyMode($pos)
identifyMode
Definition: qrcode.php:1286
lengthIndicator($mode, $version)
Return the size of length indicator for the mode and version.
Definition: qrcode.php:2338
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ encode_rs_char()

QRcode::encode_rs_char (   $rs,
  $data,
  $parity 
)
protected

Encode a Reed-Solomon codec and returns the parity array.

Parameters
$rs(array) RS values
$data(array) data
$parity(array) parity
Returns
parity array

Definition at line 2827 of file qrcode.php.

References $data, and modnn().

Referenced by init().

2827  {
2828  $MM =& $rs['mm']; // bits per symbol
2829  $NN =& $rs['nn']; // the total number of symbols in a RS block
2830  $ALPHA_TO =& $rs['alpha_to']; // the address of an array of NN elements to convert Galois field elements in index (log) form to polynomial form
2831  $INDEX_OF =& $rs['index_of']; // the address of an array of NN elements to convert Galois field elements in polynomial form to index (log) form
2832  $GENPOLY =& $rs['genpoly']; // an array of NROOTS+1 elements containing the generator polynomial in index form
2833  $NROOTS =& $rs['nroots']; // the number of roots in the RS code generator polynomial, which is the same as the number of parity symbols in a block
2834  $FCR =& $rs['fcr']; // first consecutive root, index form
2835  $PRIM =& $rs['prim']; // primitive element, index form
2836  $IPRIM =& $rs['iprim']; // prim-th root of 1, index form
2837  $PAD =& $rs['pad']; // the number of pad symbols in a block
2838  $A0 =& $NN;
2839  $parity = array_fill(0, $NROOTS, 0);
2840  for ($i=0; $i < ($NN - $NROOTS - $PAD); $i++) {
2841  $feedback = $INDEX_OF[$data[$i] ^ $parity[0]];
2842  if ($feedback != $A0) {
2843  // feedback term is non-zero
2844  // This line is unnecessary when GENPOLY[NROOTS] is unity, as it must
2845  // always be for the polynomials constructed by init_rs()
2846  $feedback = $this->modnn($rs, $NN - $GENPOLY[$NROOTS] + $feedback);
2847  for ($j=1; $j < $NROOTS; ++$j) {
2848  $parity[$j] ^= $ALPHA_TO[$this->modnn($rs, $feedback + $GENPOLY[($NROOTS - $j)])];
2849  }
2850  }
2851  // Shift
2852  array_shift($parity);
2853  if ($feedback != $A0) {
2854  array_push($parity, $ALPHA_TO[$this->modnn($rs, $feedback + $GENPOLY[0])]);
2855  } else {
2856  array_push($parity, 0);
2857  }
2858  }
2859  return $parity;
2860  }
modnn($rs, $x)
modnn
Definition: qrcode.php:2725
$data
Mask data.
Definition: qrcode.php:333
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ encodeBitStream()

QRcode::encodeBitStream (   $inputitem,
  $version 
)
protected

encodeBitStream

Parameters
$inputitem(array)
$version(int)
Returns
array input item

Definition at line 1640 of file qrcode.php.

References $version, appendBitstream(), encodeMode8(), encodeModeAn(), encodeModeKanji(), encodeModeNum(), encodeModeStructure(), maximumWords(), and newInputItem().

Referenced by createBitStream().

1640  {
1641  $inputitem['bstream'] = array();
1642  $words = $this->maximumWords($inputitem['mode'], $version);
1643  if ($inputitem['size'] > $words) {
1644  $st1 = $this->newInputItem($inputitem['mode'], $words, $inputitem['data']);
1645  $st2 = $this->newInputItem($inputitem['mode'], $inputitem['size'] - $words, array_slice($inputitem['data'], $words));
1646  $st1 = $this->encodeBitStream($st1, $version);
1647  $st2 = $this->encodeBitStream($st2, $version);
1648  $inputitem['bstream'] = array();
1649  $inputitem['bstream'] = $this->appendBitstream($inputitem['bstream'], $st1['bstream']);
1650  $inputitem['bstream'] = $this->appendBitstream($inputitem['bstream'], $st2['bstream']);
1651  } else {
1652  switch($inputitem['mode']) {
1653  case QR_MODE_NM: {
1654  $inputitem = $this->encodeModeNum($inputitem, $version);
1655  break;
1656  }
1657  case QR_MODE_AN: {
1658  $inputitem = $this->encodeModeAn($inputitem, $version);
1659  break;
1660  }
1661  case QR_MODE_8B: {
1662  $inputitem = $this->encodeMode8($inputitem, $version);
1663  break;
1664  }
1665  case QR_MODE_KJ: {
1666  $inputitem = $this->encodeModeKanji($inputitem, $version);
1667  break;
1668  }
1669  case QR_MODE_ST: {
1670  $inputitem = $this->encodeModeStructure($inputitem);
1671  break;
1672  }
1673  default: {
1674  break;
1675  }
1676  }
1677  }
1678  return $inputitem;
1679  }
encodeModeKanji($inputitem, $version)
encodeModeKanji
Definition: qrcode.php:1602
maximumWords($mode, $version)
Return the maximum length for the mode and version.
Definition: qrcode.php:2358
$version
QR code version.
Definition: qrcode.php:303
encodeModeAn($inputitem, $version)
encodeModeAn
Definition: qrcode.php:1563
encodeBitStream($inputitem, $version)
encodeBitStream
Definition: qrcode.php:1640
encodeModeStructure($inputitem)
encodeModeStructure
Definition: qrcode.php:1625
appendBitstream($bitstream, $append)
Append one bitstream to another.
Definition: qrcode.php:2182
encodeModeNum($inputitem, $version)
encodeModeNum
Definition: qrcode.php:1534
encodeMode8($inputitem, $version)
encodeMode8
Definition: qrcode.php:1586
newInputItem($mode, $size, $data, $bstream=null)
newInputItem
Definition: qrcode.php:1512
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ encodeMask()

QRcode::encodeMask (   $mask)
protected

Encode mask.

Parameters
$mask(int) masking mode

Definition at line 720 of file qrcode.php.

References $bit, $eccLength, $ret, getByteStream(), getCode(), getEccSpec(), getNextPosition(), getRemainder(), getWidth(), init(), makeMask(), mask(), newFrame(), rsBlockNum(), rsBlockNum1(), rsDataLength(), rsEccLength(), and setFrameAt().

Referenced by encodeString().

720  {
721  $spec = array(0, 0, 0, 0, 0);
722  $this->datacode = $this->getByteStream($this->items);
723  if (is_null($this->datacode)) {
724  return NULL;
725  }
726  $spec = $this->getEccSpec($this->version, $this->level, $spec);
727  $this->b1 = $this->rsBlockNum1($spec);
728  $this->dataLength = $this->rsDataLength($spec);
729  $this->eccLength = $this->rsEccLength($spec);
730  $this->ecccode = array_fill(0, $this->eccLength, 0);
731  $this->blocks = $this->rsBlockNum($spec);
732  $ret = $this->init($spec);
733  if ($ret < 0) {
734  return NULL;
735  }
736  $this->count = 0;
737  $this->width = $this->getWidth($this->version);
738  $this->frame = $this->newFrame($this->version);
739  $this->x = $this->width - 1;
740  $this->y = $this->width - 1;
741  $this->dir = -1;
742  $this->bit = -1;
743  // inteleaved data and ecc codes
744  for ($i=0; $i < ($this->dataLength + $this->eccLength); $i++) {
745  $code = $this->getCode();
746  $bit = 0x80;
747  for ($j=0; $j<8; $j++) {
748  $addr = $this->getNextPosition();
749  $this->setFrameAt($addr, 0x02 | (($bit & $code) != 0));
750  $bit = $bit >> 1;
751  }
752  }
753  // remainder bits
754  $j = $this->getRemainder($this->version);
755  for ($i=0; $i<$j; $i++) {
756  $addr = $this->getNextPosition();
757  $this->setFrameAt($addr, 0x02);
758  }
759  // masking
760  $this->runLength = array_fill(0, QRSPEC_WIDTH_MAX + 1, 0);
761  if ($mask < 0) {
762  if (QR_FIND_BEST_MASK) {
763  $masked = $this->mask($this->width, $this->frame, $this->level);
764  } else {
765  $masked = $this->makeMask($this->width, $this->frame, (intval(QR_DEFAULT_MASK) % 8), $this->level);
766  }
767  } else {
768  $masked = $this->makeMask($this->width, $this->frame, $mask, $this->level);
769  }
770  if ($masked == NULL) {
771  return NULL;
772  }
773  $this->data = $masked;
774  }
$bit
Single bit value.
Definition: qrcode.php:371
getRemainder($version)
Return the numer of remainder bits.
Definition: qrcode.php:2311
rsDataLength($spec)
Return data length.
Definition: qrcode.php:2675
getEccSpec($version, $level, $spec)
Return an array of ECC specification.
Definition: qrcode.php:2384
setFrameAt($at, $val)
Set frame value at specified position.
Definition: qrcode.php:785
getWidth($version)
Return the width of the symbol for the version.
Definition: qrcode.php:2302
rsBlockNum1($spec)
Return block number 1.
Definition: qrcode.php:2621
newFrame($version)
Set new frame for the specified version.
Definition: qrcode.php:2594
makeMask($width, $frame, $maskNo, $level)
makeMask
Definition: qrcode.php:1114
getCode()
Return Reed-Solomon block code.
Definition: qrcode.php:909
getNextPosition()
Return the next frame position.
Definition: qrcode.php:802
getByteStream($items)
Pack all bit streams padding bits into a byte array.
Definition: qrcode.php:2114
rsEccLength($spec)
Return ecc length.
Definition: qrcode.php:2684
rsBlockNum($spec)
Return block number 0.
Definition: qrcode.php:2612
init($spec)
Initialize code.
Definition: qrcode.php:858
mask($width, $frame, $level)
mask
Definition: qrcode.php:1219
$eccLength
Error correction length.
Definition: qrcode.php:415
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ encodeMode8()

QRcode::encodeMode8 (   $inputitem,
  $version 
)
protected

encodeMode8

Parameters
$inputitem(array)
$version(int)
Returns
array input item

Definition at line 1586 of file qrcode.php.

References $version, appendNum(), and lengthIndicator().

Referenced by encodeBitStream().

1586  {
1587  $inputitem['bstream'] = array();
1588  $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x4);
1589  $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_8B, $version), $inputitem['size']);
1590  for ($i=0; $i < $inputitem['size']; ++$i) {
1591  $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 8, ord($inputitem['data'][$i]));
1592  }
1593  return $inputitem;
1594  }
$version
QR code version.
Definition: qrcode.php:303
appendNum($bitstream, $bits, $num)
Append one bitstream created from number to another.
Definition: qrcode.php:2199
lengthIndicator($mode, $version)
Return the size of length indicator for the mode and version.
Definition: qrcode.php:2338
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ encodeModeAn()

QRcode::encodeModeAn (   $inputitem,
  $version 
)
protected

encodeModeAn

Parameters
$inputitem(array)
$version(int)
Returns
array input item

Definition at line 1563 of file qrcode.php.

References $version, appendNum(), lengthIndicator(), and lookAnTable().

Referenced by encodeBitStream().

1563  {
1564  $words = (int)($inputitem['size'] / 2);
1565  $inputitem['bstream'] = array();
1566  $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x02);
1567  $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_AN, $version), $inputitem['size']);
1568  for ($i=0; $i < $words; ++$i) {
1569  $val = (int)($this->lookAnTable(ord($inputitem['data'][$i*2])) * 45);
1570  $val += (int)($this->lookAnTable(ord($inputitem['data'][($i*2)+1])));
1571  $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 11, $val);
1572  }
1573  if ($inputitem['size'] & 1) {
1574  $val = $this->lookAnTable(ord($inputitem['data'][($words * 2)]));
1575  $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 6, $val);
1576  }
1577  return $inputitem;
1578  }
$version
QR code version.
Definition: qrcode.php:303
appendNum($bitstream, $bits, $num)
Append one bitstream created from number to another.
Definition: qrcode.php:2199
lookAnTable($c)
Look up the alphabet-numeric convesion table (see JIS X0510:2004, pp.19).
Definition: qrcode.php:1761
lengthIndicator($mode, $version)
Return the size of length indicator for the mode and version.
Definition: qrcode.php:2338
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ encodeModeKanji()

QRcode::encodeModeKanji (   $inputitem,
  $version 
)
protected

encodeModeKanji

Parameters
$inputitem(array)
$version(int)
Returns
array input item

Definition at line 1602 of file qrcode.php.

References $version, appendNum(), and lengthIndicator().

Referenced by encodeBitStream().

1602  {
1603  $inputitem['bstream'] = array();
1604  $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x8);
1605  $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_KJ, $version), (int)($inputitem['size'] / 2));
1606  for ($i=0; $i<$inputitem['size']; $i+=2) {
1607  $val = (ord($inputitem['data'][$i]) << 8) | ord($inputitem['data'][$i+1]);
1608  if ($val <= 0x9ffc) {
1609  $val -= 0x8140;
1610  } else {
1611  $val -= 0xc140;
1612  }
1613  $h = ($val >> 8) * 0xc0;
1614  $val = ($val & 0xff) + $h;
1615  $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 13, $val);
1616  }
1617  return $inputitem;
1618  }
$version
QR code version.
Definition: qrcode.php:303
appendNum($bitstream, $bits, $num)
Append one bitstream created from number to another.
Definition: qrcode.php:2199
lengthIndicator($mode, $version)
Return the size of length indicator for the mode and version.
Definition: qrcode.php:2338
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ encodeModeNum()

QRcode::encodeModeNum (   $inputitem,
  $version 
)
protected

encodeModeNum

Parameters
$inputitem(array)
$version(int)
Returns
array input item

Definition at line 1534 of file qrcode.php.

References $version, appendNum(), and lengthIndicator().

Referenced by encodeBitStream().

1534  {
1535  $words = (int)($inputitem['size'] / 3);
1536  $inputitem['bstream'] = array();
1537  $val = 0x1;
1538  $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, $val);
1539  $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_NM, $version), $inputitem['size']);
1540  for ($i=0; $i < $words; ++$i) {
1541  $val = (ord($inputitem['data'][$i*3 ]) - ord('0')) * 100;
1542  $val += (ord($inputitem['data'][$i*3+1]) - ord('0')) * 10;
1543  $val += (ord($inputitem['data'][$i*3+2]) - ord('0'));
1544  $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 10, $val);
1545  }
1546  if ($inputitem['size'] - $words * 3 == 1) {
1547  $val = ord($inputitem['data'][$words*3]) - ord('0');
1548  $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, $val);
1549  } elseif (($inputitem['size'] - ($words * 3)) == 2) {
1550  $val = (ord($inputitem['data'][$words*3 ]) - ord('0')) * 10;
1551  $val += (ord($inputitem['data'][$words*3+1]) - ord('0'));
1552  $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 7, $val);
1553  }
1554  return $inputitem;
1555  }
$version
QR code version.
Definition: qrcode.php:303
appendNum($bitstream, $bits, $num)
Append one bitstream created from number to another.
Definition: qrcode.php:2199
lengthIndicator($mode, $version)
Return the size of length indicator for the mode and version.
Definition: qrcode.php:2338
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ encodeModeStructure()

QRcode::encodeModeStructure (   $inputitem)
protected

encodeModeStructure

Parameters
$inputitem(array)
Returns
array input item

Definition at line 1625 of file qrcode.php.

References appendNum().

Referenced by encodeBitStream().

1625  {
1626  $inputitem['bstream'] = array();
1627  $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x03);
1628  $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, ord($inputitem['data'][1]) - 1);
1629  $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, ord($inputitem['data'][0]) - 1);
1630  $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 8, ord($inputitem['data'][2]));
1631  return $inputitem;
1632  }
appendNum($bitstream, $bits, $num)
Append one bitstream created from number to another.
Definition: qrcode.php:2199
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ encodeString()

QRcode::encodeString (   $string)
protected

Encode the input string to QR code.

Parameters
$string(string) input string to encode

Definition at line 704 of file qrcode.php.

References $ret, encodeMask(), splitString(), and toUpper().

Referenced by __construct().

704  {
705  $this->dataStr = $string;
706  if (!$this->casesensitive) {
707  $this->toUpper();
708  }
709  $ret = $this->splitString();
710  if ($ret < 0) {
711  return NULL;
712  }
713  $this->encodeMask(-1);
714  }
encodeMask($mask)
Encode mask.
Definition: qrcode.php:720
splitString()
splitString
Definition: qrcode.php:1444
toUpper()
toUpper
Definition: qrcode.php:1483
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ estimateBitsMode8()

QRcode::estimateBitsMode8 (   $size)
protected

estimateBitsMode8

Parameters
$size(int)
Returns
int number of bits

Definition at line 1819 of file qrcode.php.

References $size.

Referenced by eat8(), eatAn(), eatNum(), and estimateBitStreamSize().

1819  {
1820  return (int)($size * 8);
1821  }
$size
Definition: RandomTest.php:79
+ Here is the caller graph for this function:

◆ estimateBitsModeAn()

QRcode::estimateBitsModeAn (   $size)
protected

estimateBitsModeAn

Parameters
$size(int)
Returns
int number of bits

Definition at line 1806 of file qrcode.php.

References $size.

Referenced by eat8(), eatAn(), eatNum(), and estimateBitStreamSize().

1806  {
1807  $bits = (int)($size * 5.5); // (size / 2 ) * 11
1808  if ($size & 1) {
1809  $bits += 6;
1810  }
1811  return $bits;
1812  }
$size
Definition: RandomTest.php:79
+ Here is the caller graph for this function:

◆ estimateBitsModeKanji()

QRcode::estimateBitsModeKanji (   $size)
protected

estimateBitsModeKanji

Parameters
$size(int)
Returns
int number of bits

Definition at line 1828 of file qrcode.php.

References $size.

Referenced by estimateBitStreamSize().

1828  {
1829  return (int)($size * 6.5); // (size / 2 ) * 13
1830  }
$size
Definition: RandomTest.php:79
+ Here is the caller graph for this function:

◆ estimateBitsModeNum()

QRcode::estimateBitsModeNum (   $size)
protected

estimateBitsModeNum

Parameters
$size(int)
Returns
int number of bits

Definition at line 1785 of file qrcode.php.

References $size.

Referenced by eat8(), eatAn(), eatNum(), and estimateBitStreamSize().

1785  {
1786  $w = (int)($size / 3);
1787  $bits = ($w * 10);
1788  switch($size - ($w * 3)) {
1789  case 1: {
1790  $bits += 4;
1791  break;
1792  }
1793  case 2: {
1794  $bits += 7;
1795  break;
1796  }
1797  }
1798  return $bits;
1799  }
$size
Definition: RandomTest.php:79
+ Here is the caller graph for this function:

◆ estimateBitStreamSize()

QRcode::estimateBitStreamSize (   $items,
  $version 
)
protected

estimateBitStreamSize

Parameters
$items(array)
$version(int)
Returns
int bits

Definition at line 1891 of file qrcode.php.

References $items, $version, estimateBitsMode8(), estimateBitsModeAn(), estimateBitsModeKanji(), estimateBitsModeNum(), and lengthIndicator().

Referenced by estimateVersion().

1891  {
1892  $bits = 0;
1893  if ($version == 0) {
1894  $version = 1;
1895  }
1896  foreach ($items as $item) {
1897  switch($item['mode']) {
1898  case QR_MODE_NM: {
1899  $bits = $this->estimateBitsModeNum($item['size']);
1900  break;
1901  }
1902  case QR_MODE_AN: {
1903  $bits = $this->estimateBitsModeAn($item['size']);
1904  break;
1905  }
1906  case QR_MODE_8B: {
1907  $bits = $this->estimateBitsMode8($item['size']);
1908  break;
1909  }
1910  case QR_MODE_KJ: {
1911  $bits = $this->estimateBitsModeKanji($item['size']);
1912  break;
1913  }
1914  case QR_MODE_ST: {
1915  return STRUCTURE_HEADER_BITS;
1916  }
1917  default: {
1918  return 0;
1919  }
1920  }
1921  $l = $this->lengthIndicator($item['mode'], $version);
1922  $m = 1 << $l;
1923  $num = (int)(($item['size'] + $m - 1) / $m);
1924  $bits += $num * (4 + $l);
1925  }
1926  return $bits;
1927  }
estimateBitsModeAn($size)
estimateBitsModeAn
Definition: qrcode.php:1806
estimateBitsModeKanji($size)
estimateBitsModeKanji
Definition: qrcode.php:1828
$version
QR code version.
Definition: qrcode.php:303
estimateBitsMode8($size)
estimateBitsMode8
Definition: qrcode.php:1819
$items
Input items.
Definition: qrcode.php:443
estimateBitsModeNum($size)
estimateBitsModeNum
Definition: qrcode.php:1785
lengthIndicator($mode, $version)
Return the size of length indicator for the mode and version.
Definition: qrcode.php:2338
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ estimateVersion()

QRcode::estimateVersion (   $items)
protected

estimateVersion

Parameters
$items(array)
Returns
int version

Definition at line 1934 of file qrcode.php.

References $items, $version, estimateBitStreamSize(), and getMinimumVersion().

Referenced by convertData().

1934  {
1935  $version = 0;
1936  $prev = 0;
1937  do {
1938  $prev = $version;
1939  $bits = $this->estimateBitStreamSize($items, $prev);
1940  $version = $this->getMinimumVersion((int)(($bits + 7) / 8), $this->level);
1941  if ($version < 0) {
1942  return -1;
1943  }
1944  } while ($version > $prev);
1945  return $version;
1946  }
$version
QR code version.
Definition: qrcode.php:303
estimateBitStreamSize($items, $version)
estimateBitStreamSize
Definition: qrcode.php:1891
$items
Input items.
Definition: qrcode.php:443
getMinimumVersion($size, $level)
Return a version number that satisfies the input code length.
Definition: qrcode.php:2321
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ evaluateSymbol()

QRcode::evaluateSymbol (   $width,
  $frame 
)
protected

evaluateSymbol

Parameters
$width(int)
$frame(array)
Returns
int demerit

Definition at line 1157 of file qrcode.php.

References $frame, $width, $x, $y, and calcN1N3().

Referenced by mask().

1157  {
1158  $head = 0;
1159  $demerit = 0;
1160  for ($y=0; $y<$width; ++$y) {
1161  $head = 0;
1162  $this->runLength[0] = 1;
1163  $frameY = $frame[$y];
1164  if ($y > 0) {
1165  $frameYM = $frame[$y-1];
1166  }
1167  for ($x=0; $x<$width; ++$x) {
1168  if (($x > 0) AND ($y > 0)) {
1169  $b22 = ord($frameY[$x]) & ord($frameY[$x-1]) & ord($frameYM[$x]) & ord($frameYM[$x-1]);
1170  $w22 = ord($frameY[$x]) | ord($frameY[$x-1]) | ord($frameYM[$x]) | ord($frameYM[$x-1]);
1171  if (($b22 | ($w22 ^ 1)) & 1) {
1172  $demerit += N2;
1173  }
1174  }
1175  if (($x == 0) AND (ord($frameY[$x]) & 1)) {
1176  $this->runLength[0] = -1;
1177  $head = 1;
1178  $this->runLength[$head] = 1;
1179  } elseif ($x > 0) {
1180  if ((ord($frameY[$x]) ^ ord($frameY[$x-1])) & 1) {
1181  $head++;
1182  $this->runLength[$head] = 1;
1183  } else {
1184  $this->runLength[$head]++;
1185  }
1186  }
1187  }
1188  $demerit += $this->calcN1N3($head+1);
1189  }
1190  for ($x=0; $x<$width; ++$x) {
1191  $head = 0;
1192  $this->runLength[0] = 1;
1193  for ($y=0; $y<$width; ++$y) {
1194  if (($y == 0) AND (ord($frame[$y][$x]) & 1)) {
1195  $this->runLength[0] = -1;
1196  $head = 1;
1197  $this->runLength[$head] = 1;
1198  } elseif ($y > 0) {
1199  if ((ord($frame[$y][$x]) ^ ord($frame[$y-1][$x])) & 1) {
1200  $head++;
1201  $this->runLength[$head] = 1;
1202  } else {
1203  $this->runLength[$head]++;
1204  }
1205  }
1206  }
1207  $demerit += $this->calcN1N3($head+1);
1208  }
1209  return $demerit;
1210  }
calcN1N3($length)
calcN1N3
Definition: qrcode.php:1126
$y
Y position of bit.
Definition: qrcode.php:359
$width
Width.
Definition: qrcode.php:341
$frame
Frame.
Definition: qrcode.php:347
$x
X position of bit.
Definition: qrcode.php:353
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ generateMaskNo()

QRcode::generateMaskNo (   $maskNo,
  $width,
  $frame 
)
protected

Return bitmask.

Parameters
$maskNo(int) mask number
$width(int) width
$frame(array) frame
Returns
array bitmask

Definition at line 1063 of file qrcode.php.

References $frame, $width, $x, and $y.

Referenced by makeMaskNo().

1063  {
1064  $bitMask = array_fill(0, $width, array_fill(0, $width, 0));
1065  for ($y=0; $y<$width; ++$y) {
1066  for ($x=0; $x<$width; ++$x) {
1067  if (ord($frame[$y][$x]) & 0x80) {
1068  $bitMask[$y][$x] = 0;
1069  } else {
1070  $maskFunc = call_user_func(array($this, 'mask'.$maskNo), $x, $y);
1071  $bitMask[$y][$x] = ($maskFunc == 0)?1:0;
1072  }
1073  }
1074  }
1075  return $bitMask;
1076  }
$y
Y position of bit.
Definition: qrcode.php:359
$width
Width.
Definition: qrcode.php:341
$frame
Frame.
Definition: qrcode.php:347
$x
X position of bit.
Definition: qrcode.php:353
+ Here is the caller graph for this function:

◆ getBarcodeArray()

QRcode::getBarcodeArray ( )

Returns a barcode array which is readable by TCPDF.

Returns
array barcode array readable by TCPDF;

Definition at line 680 of file qrcode.php.

References $barcode_array.

680  {
681  return $this->barcode_array;
682  }
$barcode_array
Barcode array to be returned which is readable by TCPDF.
Definition: qrcode.php:297

◆ getBitStream()

QRcode::getBitStream (   $items)
protected

Returns a stream of bits.

Parameters
$items(int)
Returns
array padded merged byte stream

Definition at line 2104 of file qrcode.php.

References $items, appendPaddingBit(), and mergeBitStream().

Referenced by getByteStream().

2104  {
2105  $bstream = $this->mergeBitStream($items);
2106  return $this->appendPaddingBit($bstream);
2107  }
$items
Input items.
Definition: qrcode.php:443
appendPaddingBit($bstream)
Append Padding Bit to bitstream.
Definition: qrcode.php:2054
mergeBitStream($items)
mergeBitStream
Definition: qrcode.php:2087
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getByteStream()

QRcode::getByteStream (   $items)
protected

Pack all bit streams padding bits into a byte array.

Parameters
$items(int)
Returns
array padded merged byte stream

Definition at line 2114 of file qrcode.php.

References $items, bitstreamToByte(), and getBitStream().

Referenced by encodeMask().

2114  {
2115  $bstream = $this->getBitStream($items);
2116  return $this->bitstreamToByte($bstream);
2117  }
getBitStream($items)
Returns a stream of bits.
Definition: qrcode.php:2104
$items
Input items.
Definition: qrcode.php:443
bitstreamToByte($bstream)
Convert bitstream to bytes.
Definition: qrcode.php:2227
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getCode()

QRcode::getCode ( )
protected

Return Reed-Solomon block code.

Returns
array rsblocks

Definition at line 909 of file qrcode.php.

References $b1, $blocks, $dataLength, $ret, and $row.

Referenced by encodeMask().

909  {
910  if ($this->count < $this->dataLength) {
911  $row = $this->count % $this->blocks;
912  $col = $this->count / $this->blocks;
913  if ($col >= $this->rsblocks[0]['dataLength']) {
914  $row += $this->b1;
915  }
916  $ret = $this->rsblocks[$row]['data'][$col];
917  } elseif ($this->count < $this->dataLength + $this->eccLength) {
918  $row = ($this->count - $this->dataLength) % $this->blocks;
919  $col = ($this->count - $this->dataLength) / $this->blocks;
920  $ret = $this->rsblocks[$row]['ecc'][$col];
921  } else {
922  return 0;
923  }
924  $this->count++;
925  return $ret;
926  }
$b1
Value b1.
Definition: qrcode.php:421
$blocks
Blocks.
Definition: qrcode.php:391
$dataLength
Data length.
Definition: qrcode.php:409
+ Here is the caller graph for this function:

◆ getDataLength()

QRcode::getDataLength (   $version,
  $level 
)
protected

Return maximum data code length (bytes) for the version.

Parameters
$version(int) version
$level(int) error correction level
Returns
int maximum size (bytes)

Definition at line 2283 of file qrcode.php.

References $level, and $version.

Referenced by appendPaddingBit(), and getEccSpec().

2283  {
2284  return $this->capacity[$version][QRCAP_WORDS] - $this->capacity[$version][QRCAP_EC][$level];
2285  }
$version
QR code version.
Definition: qrcode.php:303
$level
Levels of error correction.
Definition: qrcode.php:309
+ Here is the caller graph for this function:

◆ getECCLength()

QRcode::getECCLength (   $version,
  $level 
)
protected

Return maximum error correction code length (bytes) for the version.

Parameters
$version(int) version
$level(int) error correction level
Returns
int ECC size (bytes)

Definition at line 2293 of file qrcode.php.

References $level, and $version.

Referenced by getEccSpec().

2293  {
2294  return $this->capacity[$version][QRCAP_EC][$level];
2295  }
$version
QR code version.
Definition: qrcode.php:303
$level
Levels of error correction.
Definition: qrcode.php:309
+ Here is the caller graph for this function:

◆ getEccSpec()

QRcode::getEccSpec (   $version,
  $level,
  $spec 
)
protected

Return an array of ECC specification.

Parameters
$version(int) version
$level(int) error correction level
$spec(array) an array of ECC specification contains as following: {# of type1 blocks, # of data code, # of ecc code, # of type2 blocks, # of data code}
Returns
array spec

Definition at line 2384 of file qrcode.php.

References $b1, $data, $level, $version, getDataLength(), and getECCLength().

Referenced by encodeMask().

2384  {
2385  if (count($spec) < 5) {
2386  $spec = array(0, 0, 0, 0, 0);
2387  }
2388  $b1 = $this->eccTable[$version][$level][0];
2389  $b2 = $this->eccTable[$version][$level][1];
2390  $data = $this->getDataLength($version, $level);
2391  $ecc = $this->getECCLength($version, $level);
2392  if ($b2 == 0) {
2393  $spec[0] = $b1;
2394  $spec[1] = (int)($data / $b1);
2395  $spec[2] = (int)($ecc / $b1);
2396  $spec[3] = 0;
2397  $spec[4] = 0;
2398  } else {
2399  $spec[0] = $b1;
2400  $spec[1] = (int)($data / ($b1 + $b2));
2401  $spec[2] = (int)($ecc / ($b1 + $b2));
2402  $spec[3] = $b2;
2403  $spec[4] = $spec[1] + 1;
2404  }
2405  return $spec;
2406  }
$b1
Value b1.
Definition: qrcode.php:421
$version
QR code version.
Definition: qrcode.php:303
$level
Levels of error correction.
Definition: qrcode.php:309
getECCLength($version, $level)
Return maximum error correction code length (bytes) for the version.
Definition: qrcode.php:2293
getDataLength($version, $level)
Return maximum data code length (bytes) for the version.
Definition: qrcode.php:2283
$data
Mask data.
Definition: qrcode.php:333
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getFormatInfo()

QRcode::getFormatInfo (   $mask,
  $level 
)
protected

Return BCH encoded format information pattern.

Parameters
$mask(array)
$level(int) error correction level
Returns
BCH encoded format information pattern

Definition at line 2491 of file qrcode.php.

References $level.

Referenced by writeFormatInformation().

2491  {
2492  if (($mask < 0) OR ($mask > 7)) {
2493  return 0;
2494  }
2495  if (($level < 0) OR ($level > 3)) {
2496  return 0;
2497  }
2498  return $this->formatInfo[$level][$mask];
2499  }
$level
Levels of error correction.
Definition: qrcode.php:309
+ Here is the caller graph for this function:

◆ getFrameAt()

QRcode::getFrameAt (   $at)
protected

Get frame value at specified position.

Parameters
$at(array) x,y position
Returns
value at specified position

Definition at line 794 of file qrcode.php.

794  {
795  return ord($this->frame[$at['y']][$at['x']]);
796  }

◆ getMinimumVersion()

QRcode::getMinimumVersion (   $size,
  $level 
)
protected

Return a version number that satisfies the input code length.

Parameters
$size(int) input code length (bytes)
$level(int) error correction level
Returns
int version number

Definition at line 2321 of file qrcode.php.

References $level, and $size.

Referenced by convertData(), and estimateVersion().

2321  {
2322  for ($i = 1; $i <= QRSPEC_VERSION_MAX; ++$i) {
2323  $words = ($this->capacity[$i][QRCAP_WORDS] - $this->capacity[$i][QRCAP_EC][$level]);
2324  if ($words >= $size) {
2325  return $i;
2326  }
2327  }
2328  // the size of input data is greater than QR capacity, try to lover the error correction mode
2329  return -1;
2330  }
$size
Definition: RandomTest.php:79
$level
Levels of error correction.
Definition: qrcode.php:309
+ Here is the caller graph for this function:

◆ getNextPosition()

QRcode::getNextPosition ( )
protected

Return the next frame position.

Returns
array of x,y coordinates

Definition at line 802 of file qrcode.php.

References $dir, $width, $x, and $y.

Referenced by encodeMask().

802  {
803  do {
804  if ($this->bit == -1) {
805  $this->bit = 0;
806  return array('x'=>$this->x, 'y'=>$this->y);
807  }
808  $x = $this->x;
809  $y = $this->y;
810  $w = $this->width;
811  if ($this->bit == 0) {
812  $x--;
813  $this->bit++;
814  } else {
815  $x++;
816  $y += $this->dir;
817  $this->bit--;
818  }
819  if ($this->dir < 0) {
820  if ($y < 0) {
821  $y = 0;
822  $x -= 2;
823  $this->dir = 1;
824  if ($x == 6) {
825  $x--;
826  $y = 9;
827  }
828  }
829  } else {
830  if ($y == $w) {
831  $y = $w - 1;
832  $x -= 2;
833  $this->dir = -1;
834  if ($x == 6) {
835  $x--;
836  $y -= 8;
837  }
838  }
839  }
840  if (($x < 0) OR ($y < 0)) {
841  return NULL;
842  }
843  $this->x = $x;
844  $this->y = $y;
845  } while(ord($this->frame[$y][$x]) & 0x80);
846  return array('x'=>$x, 'y'=>$y);
847  }
$y
Y position of bit.
Definition: qrcode.php:359
$width
Width.
Definition: qrcode.php:341
$dir
Direction.
Definition: qrcode.php:365
$x
X position of bit.
Definition: qrcode.php:353
+ Here is the caller graph for this function:

◆ getRemainder()

QRcode::getRemainder (   $version)
protected

Return the numer of remainder bits.

Parameters
$version(int) version
Returns
int number of remainder bits

Definition at line 2311 of file qrcode.php.

References $version.

Referenced by encodeMask().

2311  {
2312  return $this->capacity[$version][QRCAP_REMINDER];
2313  }
$version
QR code version.
Definition: qrcode.php:303
+ Here is the caller graph for this function:

◆ getVersionPattern()

QRcode::getVersionPattern (   $version)
protected

Return BCH encoded version information pattern that is used for the symbol of version 7 or greater.

Use lower 18 bits.

Parameters
$version(int) version
Returns
BCH encoded version information pattern

Definition at line 2478 of file qrcode.php.

References $version.

Referenced by createFrame().

2478  {
2479  if (($version < 7) OR ($version > QRSPEC_VERSION_MAX)) {
2480  return 0;
2481  }
2482  return $this->versionPattern[($version - 7)];
2483  }
$version
QR code version.
Definition: qrcode.php:303
+ Here is the caller graph for this function:

◆ getWidth()

QRcode::getWidth (   $version)
protected

Return the width of the symbol for the version.

Parameters
$version(int) version
Returns
int width

Definition at line 2302 of file qrcode.php.

References $version.

Referenced by encodeMask().

2302  {
2303  return $this->capacity[$version][QRCAP_WIDTH];
2304  }
$version
QR code version.
Definition: qrcode.php:303
+ Here is the caller graph for this function:

◆ identifyMode()

QRcode::identifyMode (   $pos)
protected

identifyMode

Parameters
$pos(int)
Returns
int mode

Definition at line 1286 of file qrcode.php.

References $d, isalnumat(), and isdigitat().

Referenced by eat8(), eatKanji(), eatNum(), splitString(), and toUpper().

1286  {
1287  if ($pos >= strlen($this->dataStr)) {
1288  return QR_MODE_NL;
1289  }
1290  $c = $this->dataStr[$pos];
1291  if ($this->isdigitat($this->dataStr, $pos)) {
1292  return QR_MODE_NM;
1293  } elseif ($this->isalnumat($this->dataStr, $pos)) {
1294  return QR_MODE_AN;
1295  } elseif ($this->hint == QR_MODE_KJ) {
1296  if ($pos+1 < strlen($this->dataStr)) {
1297  $d = $this->dataStr[$pos+1];
1298  $word = (ord($c) << 8) | ord($d);
1299  if (($word >= 0x8140 && $word <= 0x9ffc) OR ($word >= 0xe040 && $word <= 0xebbf)) {
1300  return QR_MODE_KJ;
1301  }
1302  }
1303  }
1304  return QR_MODE_8B;
1305  }
isdigitat($str, $pos)
Return true if the character at specified position is a number.
Definition: qrcode.php:1261
isalnumat($str, $pos)
Return true if the character at specified position is an alphanumeric character.
Definition: qrcode.php:1274
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ init()

QRcode::init (   $spec)
protected

Initialize code.

Parameters
$spec(array) array of ECC specification
Returns
0 in case of success, -1 in case of error

Definition at line 858 of file qrcode.php.

References encode_rs_char(), init_rs(), rsBlockNum1(), rsBlockNum2(), rsDataCodes1(), rsDataCodes2(), rsEccCodes1(), and rsEccCodes2().

Referenced by encodeMask().

858  {
859  $dl = $this->rsDataCodes1($spec);
860  $el = $this->rsEccCodes1($spec);
861  $rs = $this->init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el);
862  $blockNo = 0;
863  $dataPos = 0;
864  $eccPos = 0;
865  $endfor = $this->rsBlockNum1($spec);
866  for ($i=0; $i < $endfor; ++$i) {
867  $ecc = array_slice($this->ecccode, $eccPos);
868  $this->rsblocks[$blockNo] = array();
869  $this->rsblocks[$blockNo]['dataLength'] = $dl;
870  $this->rsblocks[$blockNo]['data'] = array_slice($this->datacode, $dataPos);
871  $this->rsblocks[$blockNo]['eccLength'] = $el;
872  $ecc = $this->encode_rs_char($rs, $this->rsblocks[$blockNo]['data'], $ecc);
873  $this->rsblocks[$blockNo]['ecc'] = $ecc;
874  $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc);
875  $dataPos += $dl;
876  $eccPos += $el;
877  $blockNo++;
878  }
879  if ($this->rsBlockNum2($spec) == 0) {
880  return 0;
881  }
882  $dl = $this->rsDataCodes2($spec);
883  $el = $this->rsEccCodes2($spec);
884  $rs = $this->init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el);
885  if ($rs == NULL) {
886  return -1;
887  }
888  $endfor = $this->rsBlockNum2($spec);
889  for ($i=0; $i < $endfor; ++$i) {
890  $ecc = array_slice($this->ecccode, $eccPos);
891  $this->rsblocks[$blockNo] = array();
892  $this->rsblocks[$blockNo]['dataLength'] = $dl;
893  $this->rsblocks[$blockNo]['data'] = array_slice($this->datacode, $dataPos);
894  $this->rsblocks[$blockNo]['eccLength'] = $el;
895  $ecc = $this->encode_rs_char($rs, $this->rsblocks[$blockNo]['data'], $ecc);
896  $this->rsblocks[$blockNo]['ecc'] = $ecc;
897  $this->ecccode = array_merge(array_slice($this->ecccode, 0, $eccPos), $ecc);
898  $dataPos += $dl;
899  $eccPos += $el;
900  $blockNo++;
901  }
902  return 0;
903  }
rsDataCodes2($spec)
Return data codes 2.
Definition: qrcode.php:2657
rsEccCodes1($spec)
Return ecc codes 1.
Definition: qrcode.php:2639
rsDataCodes1($spec)
Return data codes 1.
Definition: qrcode.php:2630
rsBlockNum2($spec)
Return block number 2.
Definition: qrcode.php:2648
rsBlockNum1($spec)
Return block number 1.
Definition: qrcode.php:2621
encode_rs_char($rs, $data, $parity)
Encode a Reed-Solomon codec and returns the parity array.
Definition: qrcode.php:2827
rsEccCodes2($spec)
Return ecc codes 2.
Definition: qrcode.php:2666
init_rs($symsize, $gfpoly, $fcr, $prim, $nroots, $pad)
Initialize a Reed-Solomon codec and add it to existing rsitems.
Definition: qrcode.php:2702
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ init_rs()

QRcode::init_rs (   $symsize,
  $gfpoly,
  $fcr,
  $prim,
  $nroots,
  $pad 
)
protected

Initialize a Reed-Solomon codec and add it to existing rsitems.

Parameters
$symsize(int) symbol size, bits
$gfpoly(int) Field generator polynomial coefficients
$fcr(int) first root of RS code generator polynomial, index form
$prim(int) primitive element to generate polynomial roots
$nroots(int) RS code generator polynomial degree (number of roots)
$pad(int) padding bytes at front of shortened block
Returns
array Array of RS values:
  • mm = Bits per symbol;
  • nn = Symbols per block;
  • alpha_to = log lookup table array;
  • index_of = Antilog lookup table array;
  • genpoly = Generator polynomial array;
  • nroots = Number of generator;
  • roots = number of parity symbols;
  • fcr = First consecutive root, index form;
  • prim = Primitive element, index form;
  • iprim = prim-th root of 1, index form;
  • pad = Padding bytes in shortened block;
  • gfpoly
.

Definition at line 2702 of file qrcode.php.

References init_rs_char().

Referenced by init().

2702  {
2703  foreach ($this->rsitems as $rs) {
2704  if (($rs['pad'] != $pad) OR ($rs['nroots'] != $nroots) OR ($rs['mm'] != $symsize)
2705  OR ($rs['gfpoly'] != $gfpoly) OR ($rs['fcr'] != $fcr) OR ($rs['prim'] != $prim)) {
2706  continue;
2707  }
2708  return $rs;
2709  }
2710  $rs = $this->init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad);
2711  array_unshift($this->rsitems, $rs);
2712  return $rs;
2713  }
init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad)
Initialize a Reed-Solomon codec and returns an array of values.
Definition: qrcode.php:2743
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ init_rs_char()

QRcode::init_rs_char (   $symsize,
  $gfpoly,
  $fcr,
  $prim,
  $nroots,
  $pad 
)
protected

Initialize a Reed-Solomon codec and returns an array of values.

Parameters
$symsize(int) symbol size, bits
$gfpoly(int) Field generator polynomial coefficients
$fcr(int) first root of RS code generator polynomial, index form
$prim(int) primitive element to generate polynomial roots
$nroots(int) RS code generator polynomial degree (number of roots)
$pad(int) padding bytes at front of shortened block
Returns
array Array of RS values:
  • mm = Bits per symbol;
  • nn = Symbols per block;
  • alpha_to = log lookup table array;
  • index_of = Antilog lookup table array;
  • genpoly = Generator polynomial array;
  • nroots = Number of generator;
  • roots = number of parity symbols;
  • fcr = First consecutive root, index form;
  • prim = Primitive element, index form;
  • iprim = prim-th root of 1, index form;
  • pad = Padding bytes in shortened block;
  • gfpoly
.

Definition at line 2743 of file qrcode.php.

References modnn().

Referenced by init_rs().

2743  {
2744  // Based on Reed solomon encoder by Phil Karn, KA9Q (GNU-LGPLv2)
2745  $rs = null;
2746  // Check parameter ranges
2747  if (($symsize < 0) OR ($symsize > 8)) {
2748  return $rs;
2749  }
2750  if (($fcr < 0) OR ($fcr >= (1<<$symsize))) {
2751  return $rs;
2752  }
2753  if (($prim <= 0) OR ($prim >= (1<<$symsize))) {
2754  return $rs;
2755  }
2756  if (($nroots < 0) OR ($nroots >= (1<<$symsize))) {
2757  return $rs;
2758  }
2759  if (($pad < 0) OR ($pad >= ((1<<$symsize) -1 - $nroots))) {
2760  return $rs;
2761  }
2762  $rs = array();
2763  $rs['mm'] = $symsize;
2764  $rs['nn'] = (1 << $symsize) - 1;
2765  $rs['pad'] = $pad;
2766  $rs['alpha_to'] = array_fill(0, ($rs['nn'] + 1), 0);
2767  $rs['index_of'] = array_fill(0, ($rs['nn'] + 1), 0);
2768  // PHP style macro replacement ;)
2769  $NN =& $rs['nn'];
2770  $A0 =& $NN;
2771  // Generate Galois field lookup tables
2772  $rs['index_of'][0] = $A0; // log(zero) = -inf
2773  $rs['alpha_to'][$A0] = 0; // alpha**-inf = 0
2774  $sr = 1;
2775  for ($i=0; $i<$rs['nn']; ++$i) {
2776  $rs['index_of'][$sr] = $i;
2777  $rs['alpha_to'][$i] = $sr;
2778  $sr <<= 1;
2779  if ($sr & (1 << $symsize)) {
2780  $sr ^= $gfpoly;
2781  }
2782  $sr &= $rs['nn'];
2783  }
2784  if ($sr != 1) {
2785  // field generator polynomial is not primitive!
2786  return NULL;
2787  }
2788  // Form RS code generator polynomial from its roots
2789  $rs['genpoly'] = array_fill(0, ($nroots + 1), 0);
2790  $rs['fcr'] = $fcr;
2791  $rs['prim'] = $prim;
2792  $rs['nroots'] = $nroots;
2793  $rs['gfpoly'] = $gfpoly;
2794  // Find prim-th root of 1, used in decoding
2795  for ($iprim=1; ($iprim % $prim) != 0; $iprim += $rs['nn']) {
2796  ; // intentional empty-body loop!
2797  }
2798  $rs['iprim'] = (int)($iprim / $prim);
2799  $rs['genpoly'][0] = 1;
2800  for ($i = 0,$root=$fcr*$prim; $i < $nroots; $i++, $root += $prim) {
2801  $rs['genpoly'][$i+1] = 1;
2802  // Multiply rs->genpoly[] by @**(root + x)
2803  for ($j = $i; $j > 0; --$j) {
2804  if ($rs['genpoly'][$j] != 0) {
2805  $rs['genpoly'][$j] = $rs['genpoly'][$j-1] ^ $rs['alpha_to'][$this->modnn($rs, $rs['index_of'][$rs['genpoly'][$j]] + $root)];
2806  } else {
2807  $rs['genpoly'][$j] = $rs['genpoly'][$j-1];
2808  }
2809  }
2810  // rs->genpoly[0] can never be zero
2811  $rs['genpoly'][0] = $rs['alpha_to'][$this->modnn($rs, $rs['index_of'][$rs['genpoly'][0]] + $root)];
2812  }
2813  // convert rs->genpoly[] to index form for quicker encoding
2814  for ($i = 0; $i <= $nroots; ++$i) {
2815  $rs['genpoly'][$i] = $rs['index_of'][$rs['genpoly'][$i]];
2816  }
2817  return $rs;
2818  }
modnn($rs, $x)
modnn
Definition: qrcode.php:2725
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ insertStructuredAppendHeader()

QRcode::insertStructuredAppendHeader (   $items,
  $size,
  $index,
  $parity 
)
protected

insertStructuredAppendHeader

Parameters
$items(array)
$size(int)
$index(int)
$parity(int)
Returns
array items

Definition at line 1711 of file qrcode.php.

References $items, $size, and newInputItem().

1711  {
1712  if ($size > MAX_STRUCTURED_SYMBOLS) {
1713  return -1;
1714  }
1715  if (($index <= 0) OR ($index > MAX_STRUCTURED_SYMBOLS)) {
1716  return -1;
1717  }
1718  $buf = array($size, $index, $parity);
1719  $entry = $this->newInputItem(QR_MODE_ST, 3, buf);
1720  array_unshift($items, $entry);
1721  return $items;
1722  }
$size
Definition: RandomTest.php:79
$items
Input items.
Definition: qrcode.php:443
newInputItem($mode, $size, $data, $bstream=null)
newInputItem
Definition: qrcode.php:1512
+ Here is the call graph for this function:

◆ isalnumat()

QRcode::isalnumat (   $str,
  $pos 
)
protected

Return true if the character at specified position is an alphanumeric character.

Parameters
$str(string) string
$pos(int) characted position
Returns
boolean true of false

Definition at line 1274 of file qrcode.php.

References lookAnTable().

Referenced by eat8(), eatAn(), and identifyMode().

1274  {
1275  if ($pos >= strlen($str)) {
1276  return false;
1277  }
1278  return ($this->lookAnTable(ord($str[$pos])) >= 0);
1279  }
lookAnTable($c)
Look up the alphabet-numeric convesion table (see JIS X0510:2004, pp.19).
Definition: qrcode.php:1761
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isdigitat()

QRcode::isdigitat (   $str,
  $pos 
)
protected

Return true if the character at specified position is a number.

Parameters
$str(string) string
$pos(int) characted position
Returns
boolean true of false

Definition at line 1261 of file qrcode.php.

Referenced by eat8(), eatAn(), eatNum(), and identifyMode().

1261  {
1262  if ($pos >= strlen($str)) {
1263  return false;
1264  }
1265  return ((ord($str[$pos]) >= ord('0'))&&(ord($str[$pos]) <= ord('9')));
1266  }
+ Here is the caller graph for this function:

◆ lengthIndicator()

QRcode::lengthIndicator (   $mode,
  $version 
)
protected

Return the size of length indicator for the mode and version.

Parameters
$mode(int) encoding mode
$version(int) version
Returns
int the size of the appropriate length indicator (bits).

Definition at line 2338 of file qrcode.php.

References $version.

Referenced by eat8(), eatAn(), eatNum(), encodeMode8(), encodeModeAn(), encodeModeKanji(), encodeModeNum(), estimateBitStreamSize(), and lengthOfCode().

2338  {
2339  if ($mode == QR_MODE_ST) {
2340  return 0;
2341  }
2342  if ($version <= 9) {
2343  $l = 0;
2344  } elseif ($version <= 26) {
2345  $l = 1;
2346  } else {
2347  $l = 2;
2348  }
2349  return $this->lengthTableBits[$mode][$l];
2350  }
$version
QR code version.
Definition: qrcode.php:303
+ Here is the caller graph for this function:

◆ lengthOfCode()

QRcode::lengthOfCode (   $mode,
  $version,
  $bits 
)
protected

lengthOfCode

Parameters
$mode(int)
$version(int)
$bits(int)
Returns
int size

Definition at line 1955 of file qrcode.php.

References $size, $version, lengthIndicator(), and maximumWords().

1955  {
1956  $payload = $bits - 4 - $this->lengthIndicator($mode, $version);
1957  switch($mode) {
1958  case QR_MODE_NM: {
1959  $chunks = (int)($payload / 10);
1960  $remain = $payload - $chunks * 10;
1961  $size = $chunks * 3;
1962  if ($remain >= 7) {
1963  $size += 2;
1964  } elseif ($remain >= 4) {
1965  $size += 1;
1966  }
1967  break;
1968  }
1969  case QR_MODE_AN: {
1970  $chunks = (int)($payload / 11);
1971  $remain = $payload - $chunks * 11;
1972  $size = $chunks * 2;
1973  if ($remain >= 6) {
1974  ++$size;
1975  }
1976  break;
1977  }
1978  case QR_MODE_8B: {
1979  $size = (int)($payload / 8);
1980  break;
1981  }
1982  case QR_MODE_KJ: {
1983  $size = (int)(($payload / 13) * 2);
1984  break;
1985  }
1986  case QR_MODE_ST: {
1987  $size = (int)($payload / 8);
1988  break;
1989  }
1990  default: {
1991  $size = 0;
1992  break;
1993  }
1994  }
1995  $maxsize = $this->maximumWords($mode, $version);
1996  if ($size < 0) {
1997  $size = 0;
1998  }
1999  if ($size > $maxsize) {
2000  $size = $maxsize;
2001  }
2002  return $size;
2003  }
maximumWords($mode, $version)
Return the maximum length for the mode and version.
Definition: qrcode.php:2358
$size
Definition: RandomTest.php:79
$version
QR code version.
Definition: qrcode.php:303
lengthIndicator($mode, $version)
Return the size of length indicator for the mode and version.
Definition: qrcode.php:2338
+ Here is the call graph for this function:

◆ lookAnTable()

QRcode::lookAnTable (   $c)
protected

Look up the alphabet-numeric convesion table (see JIS X0510:2004, pp.19).

Parameters
$c(int) character value
Returns
value

Definition at line 1761 of file qrcode.php.

Referenced by checkModeAn(), encodeModeAn(), and isalnumat().

1761  {
1762  return (($c > 127)?-1:$this->anTable[$c]);
1763  }
+ Here is the caller graph for this function:

◆ makeMask()

QRcode::makeMask (   $width,
  $frame,
  $maskNo,
  $level 
)
protected

makeMask

Parameters
$width(int)
$frame(array)
$maskNo(int)
$level(int)
Returns
array mask

Definition at line 1114 of file qrcode.php.

References $frame, $level, $width, makeMaskNo(), and writeFormatInformation().

Referenced by encodeMask().

1114  {
1115  $masked = array_fill(0, $width, str_repeat("\0", $width));
1116  $this->makeMaskNo($maskNo, $width, $frame, $masked);
1117  $this->writeFormatInformation($width, $masked, $maskNo, $level);
1118  return $masked;
1119  }
$level
Levels of error correction.
Definition: qrcode.php:309
makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly=false)
makeMaskNo
Definition: qrcode.php:1087
$width
Width.
Definition: qrcode.php:341
writeFormatInformation($width, &$frame, $mask, $level)
Write Format Information on frame and returns the number of black bits.
Definition: qrcode.php:940
$frame
Frame.
Definition: qrcode.php:347
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ makeMaskNo()

QRcode::makeMaskNo (   $maskNo,
  $width,
  $s,
$d,
  $maskGenOnly = false 
)
protected

makeMaskNo

Parameters
$maskNo(int)
$width(int)
$s(int)
$d(int)
$maskGenOnly(boolean)
Returns
int b

Definition at line 1087 of file qrcode.php.

References $d, $width, $x, $y, and generateMaskNo().

Referenced by makeMask(), and mask().

1087  {
1088  $b = 0;
1089  $bitMask = array();
1090  $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d);
1091  if ($maskGenOnly) {
1092  return;
1093  }
1094  $d = $s;
1095  for ($y=0; $y<$width; ++$y) {
1096  for ($x=0; $x<$width; ++$x) {
1097  if ($bitMask[$y][$x] == 1) {
1098  $d[$y][$x] = chr(ord($s[$y][$x]) ^ ((int)($bitMask[$y][$x])));
1099  }
1100  $b += (int)(ord($d[$y][$x]) & 1);
1101  }
1102  }
1103  return $b;
1104  }
generateMaskNo($maskNo, $width, $frame)
Return bitmask.
Definition: qrcode.php:1063
$y
Y position of bit.
Definition: qrcode.php:359
$width
Width.
Definition: qrcode.php:341
$x
X position of bit.
Definition: qrcode.php:353
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ mask()

QRcode::mask (   $width,
  $frame,
  $level 
)
protected

mask

Parameters
$width(int)
$frame(array)
$level(int)
Returns
array best mask

Definition at line 1219 of file qrcode.php.

References $frame, $level, $width, evaluateSymbol(), makeMaskNo(), and writeFormatInformation().

Referenced by encodeMask().

1219  {
1220  $minDemerit = PHP_INT_MAX;
1221  $bestMaskNum = 0;
1222  $bestMask = array();
1223  $checked_masks = array(0, 1, 2, 3, 4, 5, 6, 7);
1224  if (QR_FIND_FROM_RANDOM !== false) {
1225  $howManuOut = 8 - (QR_FIND_FROM_RANDOM % 9);
1226  for ($i = 0; $i < $howManuOut; ++$i) {
1227  $remPos = rand (0, count($checked_masks)-1);
1228  unset($checked_masks[$remPos]);
1229  $checked_masks = array_values($checked_masks);
1230  }
1231  }
1232  $bestMask = $frame;
1233  foreach ($checked_masks as $i) {
1234  $mask = array_fill(0, $width, str_repeat("\0", $width));
1235  $demerit = 0;
1236  $blacks = 0;
1237  $blacks = $this->makeMaskNo($i, $width, $frame, $mask);
1238  $blacks += $this->writeFormatInformation($width, $mask, $i, $level);
1239  $blacks = (int)(100 * $blacks / ($width * $width));
1240  $demerit = (int)((int)(abs($blacks - 50) / 5) * N4);
1241  $demerit += $this->evaluateSymbol($width, $mask);
1242  if ($demerit < $minDemerit) {
1243  $minDemerit = $demerit;
1244  $bestMask = $mask;
1245  $bestMaskNum = $i;
1246  }
1247  }
1248  return $bestMask;
1249  }
$level
Levels of error correction.
Definition: qrcode.php:309
makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly=false)
makeMaskNo
Definition: qrcode.php:1087
$width
Width.
Definition: qrcode.php:341
writeFormatInformation($width, &$frame, $mask, $level)
Write Format Information on frame and returns the number of black bits.
Definition: qrcode.php:940
$frame
Frame.
Definition: qrcode.php:347
evaluateSymbol($width, $frame)
evaluateSymbol
Definition: qrcode.php:1157
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ mask0()

QRcode::mask0 (   $x,
  $y 
)
protected

mask0

Parameters
$x(int) X position
$y(int) Y position
Returns
int mask

Definition at line 982 of file qrcode.php.

References $x, and $y.

982  {
983  return ($x + $y) & 1;
984  }
$y
Y position of bit.
Definition: qrcode.php:359
$x
X position of bit.
Definition: qrcode.php:353

◆ mask1()

QRcode::mask1 (   $x,
  $y 
)
protected

mask1

Parameters
$x(int) X position
$y(int) Y position
Returns
int mask

Definition at line 992 of file qrcode.php.

References $y.

992  {
993  return ($y & 1);
994  }
$y
Y position of bit.
Definition: qrcode.php:359

◆ mask2()

QRcode::mask2 (   $x,
  $y 
)
protected

mask2

Parameters
$x(int) X position
$y(int) Y position
Returns
int mask

Definition at line 1002 of file qrcode.php.

References $x.

1002  {
1003  return ($x % 3);
1004  }
$x
X position of bit.
Definition: qrcode.php:353

◆ mask3()

QRcode::mask3 (   $x,
  $y 
)
protected

mask3

Parameters
$x(int) X position
$y(int) Y position
Returns
int mask

Definition at line 1012 of file qrcode.php.

References $x, and $y.

1012  {
1013  return ($x + $y) % 3;
1014  }
$y
Y position of bit.
Definition: qrcode.php:359
$x
X position of bit.
Definition: qrcode.php:353

◆ mask4()

QRcode::mask4 (   $x,
  $y 
)
protected

mask4

Parameters
$x(int) X position
$y(int) Y position
Returns
int mask

Definition at line 1022 of file qrcode.php.

References $x, and $y.

1022  {
1023  return (((int)($y / 2)) + ((int)($x / 3))) & 1;
1024  }
$y
Y position of bit.
Definition: qrcode.php:359
$x
X position of bit.
Definition: qrcode.php:353

◆ mask5()

QRcode::mask5 (   $x,
  $y 
)
protected

mask5

Parameters
$x(int) X position
$y(int) Y position
Returns
int mask

Definition at line 1032 of file qrcode.php.

References $x, and $y.

1032  {
1033  return (($x * $y) & 1) + ($x * $y) % 3;
1034  }
$y
Y position of bit.
Definition: qrcode.php:359
$x
X position of bit.
Definition: qrcode.php:353

◆ mask6()

QRcode::mask6 (   $x,
  $y 
)
protected

mask6

Parameters
$x(int) X position
$y(int) Y position
Returns
int mask

Definition at line 1042 of file qrcode.php.

References $x, and $y.

1042  {
1043  return ((($x * $y) & 1) + ($x * $y) % 3) & 1;
1044  }
$y
Y position of bit.
Definition: qrcode.php:359
$x
X position of bit.
Definition: qrcode.php:353

◆ mask7()

QRcode::mask7 (   $x,
  $y 
)
protected

mask7

Parameters
$x(int) X position
$y(int) Y position
Returns
int mask

Definition at line 1052 of file qrcode.php.

References $x, and $y.

1052  {
1053  return ((($x * $y) % 3) + (($x + $y) & 1)) & 1;
1054  }
$y
Y position of bit.
Definition: qrcode.php:359
$x
X position of bit.
Definition: qrcode.php:353

◆ maximumWords()

QRcode::maximumWords (   $mode,
  $version 
)
protected

Return the maximum length for the mode and version.

Parameters
$mode(int) encoding mode
$version(int) version
Returns
int the maximum length (bytes)

Definition at line 2358 of file qrcode.php.

References $version.

Referenced by encodeBitStream(), and lengthOfCode().

2358  {
2359  if ($mode == QR_MODE_ST) {
2360  return 3;
2361  }
2362  if ($version <= 9) {
2363  $l = 0;
2364  } else if ($version <= 26) {
2365  $l = 1;
2366  } else {
2367  $l = 2;
2368  }
2369  $bits = $this->lengthTableBits[$mode][$l];
2370  $words = (1 << $bits) - 1;
2371  if ($mode == QR_MODE_KJ) {
2372  $words *= 2; // the number of bytes is required
2373  }
2374  return $words;
2375  }
$version
QR code version.
Definition: qrcode.php:303
+ Here is the caller graph for this function:

◆ mergeBitStream()

QRcode::mergeBitStream (   $items)
protected

mergeBitStream

Parameters
$items(array) items
Returns
array bitstream

Definition at line 2087 of file qrcode.php.

References $items, appendBitstream(), and convertData().

Referenced by getBitStream().

2087  {
2088  $items = $this->convertData($items);
2089  if (!is_array($items)) {
2090  return null;
2091  }
2092  $bstream = array();
2093  foreach ($items as $item) {
2094  $bstream = $this->appendBitstream($bstream, $item['bstream']);
2095  }
2096  return $bstream;
2097  }
$items
Input items.
Definition: qrcode.php:443
convertData($items)
convertData
Definition: qrcode.php:2025
appendBitstream($bitstream, $append)
Append one bitstream to another.
Definition: qrcode.php:2182
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ modnn()

QRcode::modnn (   $rs,
  $x 
)
protected

modnn

Parameters
$rs(array) RS values
$x(int) X position
Returns
int X osition

Definition at line 2725 of file qrcode.php.

References $x.

Referenced by encode_rs_char(), and init_rs_char().

2725  {
2726  while ($x >= $rs['nn']) {
2727  $x -= $rs['nn'];
2728  $x = ($x >> $rs['mm']) + ($x & $rs['nn']);
2729  }
2730  return $x;
2731  }
$x
X position of bit.
Definition: qrcode.php:353
+ Here is the caller graph for this function:

◆ newFrame()

QRcode::newFrame (   $version)
protected

Set new frame for the specified version.

Parameters
$version(int) version
Returns
Array of unsigned char.

Definition at line 2594 of file qrcode.php.

References $version, and createFrame().

Referenced by encodeMask().

2594  {
2595  if (($version < 1) OR ($version > QRSPEC_VERSION_MAX)) {
2596  return NULL;
2597  }
2598  if (!isset($this->frames[$version])) {
2599  $this->frames[$version] = $this->createFrame($version);
2600  }
2601  if (is_null($this->frames[$version])) {
2602  return NULL;
2603  }
2604  return $this->frames[$version];
2605  }
$version
QR code version.
Definition: qrcode.php:303
createFrame($version)
Return a copy of initialized frame.
Definition: qrcode.php:2529
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ newFromBytes()

QRcode::newFromBytes (   $size,
  $data 
)
protected

Return new bitstream from bytes.

Parameters
$size(int) size
$data(array) bytes
Returns
array bitstream

Definition at line 2158 of file qrcode.php.

References $data, $size, and allocate().

Referenced by appendBytes().

2158  {
2159  $bstream = $this->allocate($size * 8);
2160  $p=0;
2161  for ($i=0; $i<$size; ++$i) {
2162  $mask = 0x80;
2163  for ($j=0; $j<8; ++$j) {
2164  if ($data[$i] & $mask) {
2165  $bstream[$p] = 1;
2166  } else {
2167  $bstream[$p] = 0;
2168  }
2169  $p++;
2170  $mask = $mask >> 1;
2171  }
2172  }
2173  return $bstream;
2174  }
$size
Definition: RandomTest.php:79
$data
Mask data.
Definition: qrcode.php:333
allocate($setLength)
Return an array with zeros.
Definition: qrcode.php:2128
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ newFromNum()

QRcode::newFromNum (   $bits,
  $num 
)
protected

Return new bitstream from number.

Parameters
$bits(int) number of bits
$num(int) number
Returns
array bitstream

Definition at line 2138 of file qrcode.php.

References allocate().

Referenced by appendNum().

2138  {
2139  $bstream = $this->allocate($bits);
2140  $mask = 1 << ($bits - 1);
2141  for ($i=0; $i<$bits; ++$i) {
2142  if ($num & $mask) {
2143  $bstream[$i] = 1;
2144  } else {
2145  $bstream[$i] = 0;
2146  }
2147  $mask = $mask >> 1;
2148  }
2149  return $bstream;
2150  }
allocate($setLength)
Return an array with zeros.
Definition: qrcode.php:2128
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ newInputItem()

QRcode::newInputItem (   $mode,
  $size,
  $data,
  $bstream = null 
)
protected

newInputItem

Parameters
$mode(int)
$size(int)
$data(array)
$bstream(array)
Returns
array input item

Definition at line 1512 of file qrcode.php.

References $data, $size, and check().

Referenced by appendNewInputItem(), encodeBitStream(), and insertStructuredAppendHeader().

1512  {
1513  $setData = array_slice($data, 0, $size);
1514  if (count($setData) < $size) {
1515  $setData = array_merge($setData, array_fill(0, ($size - count($setData)), 0));
1516  }
1517  if (!$this->check($mode, $size, $setData)) {
1518  return NULL;
1519  }
1520  $inputitem = array();
1521  $inputitem['mode'] = $mode;
1522  $inputitem['size'] = $size;
1523  $inputitem['data'] = $setData;
1524  $inputitem['bstream'] = $bstream;
1525  return $inputitem;
1526  }
$size
Definition: RandomTest.php:79
check($mode, $size, $data)
Validate the input data.
Definition: qrcode.php:1858
$data
Mask data.
Definition: qrcode.php:333
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ putAlignmentMarker()

QRcode::putAlignmentMarker (   $frame,
  $ox,
  $oy 
)
protected

Put an alignment marker.

Parameters
$frame(array) frame
$ox(int) X center coordinate of the pattern
$oy(int) Y center coordinate of the pattern
Returns
array frame

Definition at line 2415 of file qrcode.php.

References $frame, $y, and qrstrset().

Referenced by putAlignmentPattern().

2415  {
2416  $finder = array(
2417  "\xa1\xa1\xa1\xa1\xa1",
2418  "\xa1\xa0\xa0\xa0\xa1",
2419  "\xa1\xa0\xa1\xa0\xa1",
2420  "\xa1\xa0\xa0\xa0\xa1",
2421  "\xa1\xa1\xa1\xa1\xa1"
2422  );
2423  $yStart = $oy - 2;
2424  $xStart = $ox - 2;
2425  for ($y=0; $y < 5; $y++) {
2426  $frame = $this->qrstrset($frame, $xStart, $yStart+$y, $finder[$y]);
2427  }
2428  return $frame;
2429  }
$y
Y position of bit.
Definition: qrcode.php:359
qrstrset($srctab, $x, $y, $repl, $replLen=false)
Replace a value on the array at the specified position.
Definition: qrcode.php:2272
$frame
Frame.
Definition: qrcode.php:347
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ putAlignmentPattern()

QRcode::putAlignmentPattern (   $version,
  $frame,
  $width 
)
protected

Put an alignment pattern.

Parameters
$version(int) version
$frame(array) frame
$width(int) width
Returns
array frame

Definition at line 2438 of file qrcode.php.

References $d, $frame, $version, $width, $x, $y, and putAlignmentMarker().

Referenced by createFrame().

2438  {
2439  if ($version < 2) {
2440  return $frame;
2441  }
2442  $d = $this->alignmentPattern[$version][1] - $this->alignmentPattern[$version][0];
2443  if ($d < 0) {
2444  $w = 2;
2445  } else {
2446  $w = (int)(($width - $this->alignmentPattern[$version][0]) / $d + 2);
2447  }
2448  if ($w * $w - 3 == 1) {
2449  $x = $this->alignmentPattern[$version][0];
2450  $y = $this->alignmentPattern[$version][0];
2451  $frame = $this->putAlignmentMarker($frame, $x, $y);
2452  return $frame;
2453  }
2454  $cx = $this->alignmentPattern[$version][0];
2455  $wo = $w - 1;
2456  for ($x=1; $x < $wo; ++$x) {
2457  $frame = $this->putAlignmentMarker($frame, 6, $cx);
2458  $frame = $this->putAlignmentMarker($frame, $cx, 6);
2459  $cx += $d;
2460  }
2461  $cy = $this->alignmentPattern[$version][0];
2462  for ($y=0; $y < $wo; ++$y) {
2463  $cx = $this->alignmentPattern[$version][0];
2464  for ($x=0; $x < $wo; ++$x) {
2465  $frame = $this->putAlignmentMarker($frame, $cx, $cy);
2466  $cx += $d;
2467  }
2468  $cy += $d;
2469  }
2470  return $frame;
2471  }
$version
QR code version.
Definition: qrcode.php:303
putAlignmentMarker($frame, $ox, $oy)
Put an alignment marker.
Definition: qrcode.php:2415
$y
Y position of bit.
Definition: qrcode.php:359
$width
Width.
Definition: qrcode.php:341
$frame
Frame.
Definition: qrcode.php:347
$x
X position of bit.
Definition: qrcode.php:353
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ putFinderPattern()

QRcode::putFinderPattern (   $frame,
  $ox,
  $oy 
)
protected

Put a finder pattern.

Parameters
$frame(array) frame
$ox(int) X center coordinate of the pattern
$oy(int) Y center coordinate of the pattern
Returns
array frame

Definition at line 2508 of file qrcode.php.

References $frame, $y, and qrstrset().

Referenced by createFrame().

2508  {
2509  $finder = array(
2510  "\xc1\xc1\xc1\xc1\xc1\xc1\xc1",
2511  "\xc1\xc0\xc0\xc0\xc0\xc0\xc1",
2512  "\xc1\xc0\xc1\xc1\xc1\xc0\xc1",
2513  "\xc1\xc0\xc1\xc1\xc1\xc0\xc1",
2514  "\xc1\xc0\xc1\xc1\xc1\xc0\xc1",
2515  "\xc1\xc0\xc0\xc0\xc0\xc0\xc1",
2516  "\xc1\xc1\xc1\xc1\xc1\xc1\xc1"
2517  );
2518  for ($y=0; $y < 7; $y++) {
2519  $frame = $this->qrstrset($frame, $ox, ($oy + $y), $finder[$y]);
2520  }
2521  return $frame;
2522  }
$y
Y position of bit.
Definition: qrcode.php:359
qrstrset($srctab, $x, $y, $repl, $replLen=false)
Replace a value on the array at the specified position.
Definition: qrcode.php:2272
$frame
Frame.
Definition: qrcode.php:347
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ qrstrset()

QRcode::qrstrset (   $srctab,
  $x,
  $y,
  $repl,
  $replLen = false 
)
protected

Replace a value on the array at the specified position.

Parameters
$srctab(array)
$x(int) X position
$y(int) Y position
$repl(string) value to replace
$replLen(int) length of the repl string
Returns
array srctab

Definition at line 2272 of file qrcode.php.

References $x, and $y.

Referenced by createFrame(), putAlignmentMarker(), and putFinderPattern().

2272  {
2273  $srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl));
2274  return $srctab;
2275  }
$y
Y position of bit.
Definition: qrcode.php:359
$x
X position of bit.
Definition: qrcode.php:353
+ Here is the caller graph for this function:

◆ rsBlockNum()

QRcode::rsBlockNum (   $spec)
protected

Return block number 0.

Parameters
$spec(array)
Returns
int value

Definition at line 2612 of file qrcode.php.

Referenced by encodeMask().

2612  {
2613  return ($spec[0] + $spec[3]);
2614  }
+ Here is the caller graph for this function:

◆ rsBlockNum1()

QRcode::rsBlockNum1 (   $spec)
protected

Return block number 1.

Parameters
$spec(array)
Returns
int value

Definition at line 2621 of file qrcode.php.

Referenced by encodeMask(), and init().

2621  {
2622  return $spec[0];
2623  }
+ Here is the caller graph for this function:

◆ rsBlockNum2()

QRcode::rsBlockNum2 (   $spec)
protected

Return block number 2.

Parameters
$spec(array)
Returns
int value

Definition at line 2648 of file qrcode.php.

Referenced by init().

2648  {
2649  return $spec[3];
2650  }
+ Here is the caller graph for this function:

◆ rsDataCodes1()

QRcode::rsDataCodes1 (   $spec)
protected

Return data codes 1.

Parameters
$spec(array)
Returns
int value

Definition at line 2630 of file qrcode.php.

Referenced by init().

2630  {
2631  return $spec[1];
2632  }
+ Here is the caller graph for this function:

◆ rsDataCodes2()

QRcode::rsDataCodes2 (   $spec)
protected

Return data codes 2.

Parameters
$spec(array)
Returns
int value

Definition at line 2657 of file qrcode.php.

Referenced by init().

2657  {
2658  return $spec[4];
2659  }
+ Here is the caller graph for this function:

◆ rsDataLength()

QRcode::rsDataLength (   $spec)
protected

Return data length.

Parameters
$spec(array)
Returns
int value

Definition at line 2675 of file qrcode.php.

Referenced by encodeMask().

2675  {
2676  return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]);
2677  }
+ Here is the caller graph for this function:

◆ rsEccCodes1()

QRcode::rsEccCodes1 (   $spec)
protected

Return ecc codes 1.

Parameters
$spec(array)
Returns
int value

Definition at line 2639 of file qrcode.php.

Referenced by init().

2639  {
2640  return $spec[2];
2641  }
+ Here is the caller graph for this function:

◆ rsEccCodes2()

QRcode::rsEccCodes2 (   $spec)
protected

Return ecc codes 2.

Parameters
$spec(array)
Returns
int value

Definition at line 2666 of file qrcode.php.

Referenced by init().

2666  {
2667  return $spec[2];
2668  }
+ Here is the caller graph for this function:

◆ rsEccLength()

QRcode::rsEccLength (   $spec)
protected

Return ecc length.

Parameters
$spec(array)
Returns
int value

Definition at line 2684 of file qrcode.php.

Referenced by encodeMask().

2684  {
2685  return ($spec[0] + $spec[3]) * $spec[2];
2686  }
+ Here is the caller graph for this function:

◆ setFrameAt()

QRcode::setFrameAt (   $at,
  $val 
)
protected

Set frame value at specified position.

Parameters
$at(array) x,y position
$val(int) value of the character to set

Definition at line 785 of file qrcode.php.

Referenced by encodeMask().

785  {
786  $this->frame[$at['y']][$at['x']] = chr($val);
787  }
+ Here is the caller graph for this function:

◆ splitString()

QRcode::splitString ( )
protected

splitString

Returns
(int)

Definition at line 1444 of file qrcode.php.

References $hint, eat8(), eatAn(), eatKanji(), eatNum(), and identifyMode().

Referenced by encodeString().

1444  {
1445  while (strlen($this->dataStr) > 0) {
1446  $mode = $this->identifyMode(0);
1447  switch ($mode) {
1448  case QR_MODE_NM: {
1449  $length = $this->eatNum();
1450  break;
1451  }
1452  case QR_MODE_AN: {
1453  $length = $this->eatAn();
1454  break;
1455  }
1456  case QR_MODE_KJ: {
1457  if ($hint == QR_MODE_KJ) {
1458  $length = $this->eatKanji();
1459  } else {
1460  $length = $this->eat8();
1461  }
1462  break;
1463  }
1464  default: {
1465  $length = $this->eat8();
1466  break;
1467  }
1468  }
1469  if ($length == 0) {
1470  return 0;
1471  }
1472  if ($length < 0) {
1473  return -1;
1474  }
1475  $this->dataStr = substr($this->dataStr, $length);
1476  }
1477  return 0;
1478  }
eatAn()
eatAn
Definition: qrcode.php:1343
eat8()
eat8
Definition: qrcode.php:1395
$hint
Encoding mode.
Definition: qrcode.php:315
eatKanji()
eatKanji
Definition: qrcode.php:1382
eatNum()
eatNum
Definition: qrcode.php:1311
identifyMode($pos)
identifyMode
Definition: qrcode.php:1286
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ toUpper()

QRcode::toUpper ( )
protected

toUpper

Definition at line 1483 of file qrcode.php.

References $dataStr, and identifyMode().

Referenced by encodeString().

1483  {
1484  $stringLen = strlen($this->dataStr);
1485  $p = 0;
1486  while ($p < $stringLen) {
1487  $mode = $this->identifyMode(substr($this->dataStr, $p), $this->hint);
1488  if ($mode == QR_MODE_KJ) {
1489  $p += 2;
1490  } else {
1491  if ((ord($this->dataStr[$p]) >= ord('a')) AND (ord($this->dataStr[$p]) <= ord('z'))) {
1492  $this->dataStr[$p] = chr(ord($this->dataStr[$p]) - 32);
1493  }
1494  $p++;
1495  }
1496  }
1497  return $this->dataStr;
1498  }
$dataStr
Input data string.
Definition: qrcode.php:437
identifyMode($pos)
identifyMode
Definition: qrcode.php:1286
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ writeFormatInformation()

QRcode::writeFormatInformation (   $width,
$frame,
  $mask,
  $level 
)
protected

Write Format Information on frame and returns the number of black bits.

Parameters
$width(int) frame width
$frame(array) frame
$mask(array) masking mode
$level(int) error correction level
Returns
int blacks

Definition at line 940 of file qrcode.php.

References $frame, $level, $width, and getFormatInfo().

Referenced by makeMask(), and mask().

940  {
941  $blacks = 0;
942  $format = $this->getFormatInfo($mask, $level);
943  for ($i=0; $i<8; ++$i) {
944  if ($format & 1) {
945  $blacks += 2;
946  $v = 0x85;
947  } else {
948  $v = 0x84;
949  }
950  $frame[8][$width - 1 - $i] = chr($v);
951  if ($i < 6) {
952  $frame[$i][8] = chr($v);
953  } else {
954  $frame[$i + 1][8] = chr($v);
955  }
956  $format = $format >> 1;
957  }
958  for ($i=0; $i<7; ++$i) {
959  if ($format & 1) {
960  $blacks += 2;
961  $v = 0x85;
962  } else {
963  $v = 0x84;
964  }
965  $frame[$width - 7 + $i][8] = chr($v);
966  if ($i == 0) {
967  $frame[8][7] = chr($v);
968  } else {
969  $frame[8][6 - $i] = chr($v);
970  }
971  $format = $format >> 1;
972  }
973  return $blacks;
974  }
$level
Levels of error correction.
Definition: qrcode.php:309
$width
Width.
Definition: qrcode.php:341
$frame
Frame.
Definition: qrcode.php:347
getFormatInfo($mask, $level)
Return BCH encoded format information pattern.
Definition: qrcode.php:2491
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Field Documentation

◆ $alignmentPattern

QRcode::$alignmentPattern
protected
Initial value:
= array(
array( 0, 0),
array( 0, 0), array(18, 0), array(22, 0), array(26, 0), array(30, 0),
array(34, 0), array(22, 38), array(24, 42), array(26, 46), array(28, 50),
array(30, 54), array(32, 58), array(34, 62), array(26, 46), array(26, 48),
array(26, 50), array(30, 54), array(30, 56), array(30, 58), array(34, 62),
array(28, 50), array(26, 50), array(30, 54), array(28, 54), array(32, 58),
array(30, 58), array(34, 62), array(26, 50), array(30, 54), array(26, 52),
array(30, 56), array(34, 60), array(30, 58), array(34, 62), array(30, 54),
array(24, 50), array(28, 54), array(32, 58), array(26, 54), array(30, 58)
)

Array Positions of alignment patterns.

This array includes only the second and the third position of the alignment patterns. Rest of them can be calculated from the distance between them. See Table 1 in Appendix E (pp.71) of JIS X0510:2004.

Definition at line 589 of file qrcode.php.

◆ $anTable

QRcode::$anTable
protected
Initial value:
= array(
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1,
-1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
)

Alphabet-numeric convesion table.

Definition at line 463 of file qrcode.php.

◆ $b1

QRcode::$b1
protected

Value b1.

Definition at line 421 of file qrcode.php.

Referenced by getCode(), and getEccSpec().

◆ $barcode_array

QRcode::$barcode_array = array()
protected

Barcode array to be returned which is readable by TCPDF.

Definition at line 297 of file qrcode.php.

Referenced by __construct(), and getBarcodeArray().

◆ $bit

QRcode::$bit
protected

Single bit value.

Definition at line 371 of file qrcode.php.

Referenced by encodeMask().

◆ $blocks

QRcode::$blocks
protected

Blocks.

Definition at line 391 of file qrcode.php.

Referenced by getCode().

◆ $capacity

QRcode::$capacity
protected

Array Table of the capacity of symbols.

See Table 1 (pp.13) and Table 12-16 (pp.30-36), JIS X0510:2004.

Definition at line 479 of file qrcode.php.

◆ $casesensitive

QRcode::$casesensitive = true
protected

Boolean flag, if true the input string will be converted to uppercase.

Definition at line 321 of file qrcode.php.

◆ $count

QRcode::$count
protected

Counter.

Definition at line 403 of file qrcode.php.

◆ $data

◆ $datacode

QRcode::$datacode = array()
protected

Data code.

Definition at line 379 of file qrcode.php.

◆ $dataLength

QRcode::$dataLength
protected

Data length.

Definition at line 409 of file qrcode.php.

Referenced by getCode().

◆ $dataStr

QRcode::$dataStr = ''
protected

Input data string.

Definition at line 437 of file qrcode.php.

Referenced by toUpper().

◆ $dir

QRcode::$dir
protected

Direction.

Definition at line 365 of file qrcode.php.

Referenced by getNextPosition().

◆ $ecccode

QRcode::$ecccode = array()
protected

Error correction code.

Definition at line 385 of file qrcode.php.

◆ $eccLength

QRcode::$eccLength
protected

Error correction length.

Definition at line 415 of file qrcode.php.

Referenced by encodeMask().

◆ $eccTable

QRcode::$eccTable
protected

Array Table of the error correction code (Reed-Solomon block).

See Table 12-16 (pp.30-36), JIS X0510:2004.

Definition at line 539 of file qrcode.php.

◆ $formatInfo

QRcode::$formatInfo
protected
Initial value:
= array(
array(0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976),
array(0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0),
array(0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed),
array(0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b)
)

Array Format information.

Definition at line 619 of file qrcode.php.

◆ $frame

◆ $frames

QRcode::$frames = array()
protected

Array of frames.

Definition at line 457 of file qrcode.php.

◆ $hint

QRcode::$hint = QR_MODE_8B
protected

Encoding mode.

Definition at line 315 of file qrcode.php.

Referenced by splitString().

◆ $items

◆ $lengthTableBits

QRcode::$lengthTableBits
protected
Initial value:
= array(
array(10, 12, 14),
array( 9, 11, 13),
array( 8, 16, 16),
array( 8, 10, 12)
)

Array Length indicator.

Definition at line 527 of file qrcode.php.

◆ $level

QRcode::$level = QR_ECLEVEL_L
protected

Levels of error correction.

See definitions for possible values.

Definition at line 309 of file qrcode.php.

Referenced by getDataLength(), getECCLength(), getEccSpec(), getFormatInfo(), getMinimumVersion(), makeMask(), mask(), and writeFormatInformation().

◆ $rsblocks

QRcode::$rsblocks = array()
protected

Reed-Solomon blocks.

Definition at line 397 of file qrcode.php.

◆ $rsitems

QRcode::$rsitems = array()
protected

Reed-Solomon items.

Definition at line 451 of file qrcode.php.

◆ $runLength

QRcode::$runLength = array()
protected

Run length.

Definition at line 429 of file qrcode.php.

◆ $structured

QRcode::$structured = 0
protected

Structured QR code (not supported yet).

Definition at line 327 of file qrcode.php.

◆ $version

QRcode::$version = 0
protected

QR code version.

Size of QRcode is defined as version. Version is from 1 to 40. Version 1 is 21*21 matrix. And 4 modules increases whenever 1 version increases. So version 40 is 177*177 matrix.

Definition at line 303 of file qrcode.php.

Referenced by createFrame(), encodeBitStream(), encodeMode8(), encodeModeAn(), encodeModeKanji(), encodeModeNum(), estimateBitStreamSize(), estimateVersion(), getDataLength(), getECCLength(), getEccSpec(), getRemainder(), getVersionPattern(), getWidth(), lengthIndicator(), lengthOfCode(), maximumWords(), newFrame(), and putAlignmentPattern().

◆ $versionPattern

QRcode::$versionPattern
protected
Initial value:
= array(
0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d,
0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9,
0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75,
0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64,
0x27541, 0x28c69
)

Array Version information pattern (BCH coded).

See Table 1 in Appendix D (pp.68) of JIS X0510:2004. size: [QRSPEC_VERSION_MAX - 6]

Definition at line 607 of file qrcode.php.

◆ $width

QRcode::$width
protected

◆ $x

QRcode::$x
protected

◆ $y


The documentation for this class was generated from the following file: