<?php
/*
JANCodeCreator

NYSL Version 0.9982
2011, yuhisa

?n   = 数字を入れるかどうか(要フォント 要調整 要コメントアウト解除)
?l   = 特殊コードの長さを変えるかどうか
?d   = デバッグモード
?jan = JANコード

*/


class JANCodeCreator {
    
    
/*
    JC_ExportImage(string JANCodeNumber)
    */
    
function JC_ExportImage ($Number) {
        
        if (!
ctype_digit($Number))
            
$Number "4993707002056";
        
        
// デバッグモード 0:Off 1:On
        
$DebugMode = isset($_GET["d"]);
        
        if (!
$DebugMode)
            
header("Content-type: image/png");
        
        
// 左奇数パリティ定義
        
$LeftOddSet  = array("0001101""0011001""0010011""0111101""0100011",
            
"0110001""0101111""0111011""0110111""0001011");
        
        
// 左偶数パリティ定義
        
$LeftEvenSet = array("0100111""0110011""0011011""0100001""0011101",
            
"0111001""0000101""0010001""0001001""0010111");
        
        
// 右パリティ定義
        
$RightSet    = array("1110010""1100110""1101100""1000010""1011100",
            
"1001110""1010000""1000100""1001000""1110100");
        
        
// 特殊バー定義
        
$EntitySet   = array("101""01010""101");
        
        
// パリティ定義
        
$CodeRuleSet = array("111111""110100""110001""110001""101100",
            
"100110""100011""101010""101001""100101");
        
        
// コードの太さ(変更時はキャンバスサイズの変更等が必要)
        
$weight 2;
        
        if (
$_GET["n"]) {
            
$im imagecreate(21060);
        } else {
            
$im imagecreate(19650);
        }
        
        
// パレット定義
        
$white imagecolorallocate($im255255255);
        
$black imagecolorallocate($im646464);
        
        
$AddNumber  substr($Number01);    // 1桁目を切り取る
        
$CodeNumber substr($Number1);       // 2桁目以降を切り取る
        
$CodeRule   $CodeRuleSet[$AddNumber]; // 1桁目を基準に使用するパリティを決める
        
        // 0:コード格納 1:特殊コード位置
        
$Code       = array("""");
        
// スタートコード追加
        
$Code       JANCodeCreator::JC_AddCode($Code$EntitySet["0"], "111");
        
        
// 2桁目以降の処理(1桁目は左半分2~6桁のパリティで構成)
        
for ($i=0;$i<strlen($CodeNumber);$i++) {
            
            
// センターコード追加
            
if ($i == 6)
                
$Code JANCodeCreator::JC_AddCode($Code$EntitySet["1"], "11111");
            
            
// 左半分(6桁以下)奇数パリティ
            
if ($CodeRule[$i] == "1" && $i <= 5) {
                
$Code JANCodeCreator::JC_AddCode($Code$LeftOddSet[$CodeNumber[$i]], "0000000");
                
            
// 左半分(6桁以下)偶数パリティ
            
} else if ($CodeRule[$i] == "0" && $i <= 5) {
                
$Code JANCodeCreator::JC_AddCode($Code$LeftEvenSet[$CodeNumber[$i]], "0000000");
                
            
// 右半分7桁目以降
            
} else {
                
$Code JANCodeCreator::JC_AddCode($Code$RightSet[$CodeNumber[$i]], "0000000");
                
            }
            
        }
        
        
// ストップコード追加
        
$Code JANCodeCreator::JC_AddCode($Code$EntitySet["2"], "111");
        
        if (
$DebugMode)
            
var_dump($Code);
        
        
// コードを元にバーを作る
        
for ($i=0;$i<strlen($Code["0"]);$i++) {
            
            
// 描画位置を考えてもらう
            
$ret JANCodeCreator::JC_ProtBar($weight$i$Code["1"][$i]);
            
            if (
$Code["0"][$i] == "0") {
                
// 一応描画しておく
                
imagefilledrectangle($im$ret[0], $ret[1], $ret[2], $ret[3], $white);
                
            } else {
                
// バー描画
                
imagefilledrectangle($im$ret[0], $ret[1], $ret[2], $ret[3], $black);
                
            }
            
        }
        
        
/*
        if ($_GET["n"])
            imagefttext($im, 17, 0, 2, 58, $black, "O019000M.TTF",
                substr($Number, 0, 1)." ".substr($Number, 1, 6)." ".substr($Number, 7)." ");
        */
        
        // 画像出力
        
if (!$DebugMode) {
            
imagepng($im);
            
imagedestroy($im);
        }
        
    }
    
    
/*
    JC_ProtBar(int CodeWeight, string Position, string LengthOption)
    */
    
function JCC_ProtBar ($Weight$Offset$Length=null) {
        
        if (
$_GET["n"]) {
            
$BOffset 14;
        } else {
            
$BOffset 0;
        }
        
        if (
$_GET["l"] && !$Length) {
            return array(
$BOffset+($Weight*2)+($Weight*$Offset), 0$BOffset+($Weight+1)+($Weight*$Offset), 40);
            
        } else {
            return array(
$BOffset+($Weight*2)+($Weight*$Offset), 0$BOffset+($Weight+1)+($Weight*$Offset), 50);
            
        }
        
    }
    
    
/*
    JC_AddCode(array Code, string AddCode, string EntityPosition)
    */
    
function JC_AddCode ($Code$AddCode$EntityPos) {
        
        
$Code[0] .= $AddCode;
        
$Code[1] .= $EntityPos;
        
        return 
$Code;
        
    }
    
}



JANCodeCreator::JCC_ExportImage($_GET['jan']);

?>