77 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
declare(strict_types = 1);
 | 
						|
 | 
						|
namespace BaconQrCode\Common;
 | 
						|
 | 
						|
use DASPRiD\Enum\AbstractEnum;
 | 
						|
 | 
						|
/**
 | 
						|
 * Enum representing various modes in which data can be encoded to bits.
 | 
						|
 *
 | 
						|
 * @method static self TERMINATOR()
 | 
						|
 * @method static self NUMERIC()
 | 
						|
 * @method static self ALPHANUMERIC()
 | 
						|
 * @method static self STRUCTURED_APPEND()
 | 
						|
 * @method static self BYTE()
 | 
						|
 * @method static self ECI()
 | 
						|
 * @method static self KANJI()
 | 
						|
 * @method static self FNC1_FIRST_POSITION()
 | 
						|
 * @method static self FNC1_SECOND_POSITION()
 | 
						|
 * @method static self HANZI()
 | 
						|
 */
 | 
						|
final class Mode extends AbstractEnum
 | 
						|
{
 | 
						|
    protected const TERMINATOR = [[0, 0, 0], 0x00];
 | 
						|
    protected const NUMERIC = [[10, 12, 14], 0x01];
 | 
						|
    protected const ALPHANUMERIC = [[9, 11, 13], 0x02];
 | 
						|
    protected const STRUCTURED_APPEND = [[0, 0, 0], 0x03];
 | 
						|
    protected const BYTE = [[8, 16, 16], 0x04];
 | 
						|
    protected const ECI = [[0, 0, 0], 0x07];
 | 
						|
    protected const KANJI = [[8, 10, 12], 0x08];
 | 
						|
    protected const FNC1_FIRST_POSITION = [[0, 0, 0], 0x05];
 | 
						|
    protected const FNC1_SECOND_POSITION = [[0, 0, 0], 0x09];
 | 
						|
    protected const HANZI = [[8, 10, 12], 0x0d];
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var int[]
 | 
						|
     */
 | 
						|
    private $characterCountBitsForVersions;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var int
 | 
						|
     */
 | 
						|
    private $bits;
 | 
						|
 | 
						|
    protected function __construct(array $characterCountBitsForVersions, int $bits)
 | 
						|
    {
 | 
						|
        $this->characterCountBitsForVersions = $characterCountBitsForVersions;
 | 
						|
        $this->bits = $bits;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the number of bits used in a specific QR code version.
 | 
						|
     */
 | 
						|
    public function getCharacterCountBits(Version $version) : int
 | 
						|
    {
 | 
						|
        $number = $version->getVersionNumber();
 | 
						|
 | 
						|
        if ($number <= 9) {
 | 
						|
            $offset = 0;
 | 
						|
        } elseif ($number <= 26) {
 | 
						|
            $offset = 1;
 | 
						|
        } else {
 | 
						|
            $offset = 2;
 | 
						|
        }
 | 
						|
 | 
						|
        return $this->characterCountBitsForVersions[$offset];
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the four bits used to encode this mode.
 | 
						|
     */
 | 
						|
    public function getBits() : int
 | 
						|
    {
 | 
						|
        return $this->bits;
 | 
						|
    }
 | 
						|
}
 |