array('9500549300568130',9,1), // mar eladva '950055' => array('9500559300623371',9,1), '950056' => array('9500569300901666',9,1), '950057' => array('9500579300292771',9,1), '950058' => array('9500589300939891',9,1), '950059' => array('9500599300308525',9,1), '950060' => array('9500609300502875',9,1), '950061' => array('9500619300525057',9,1), '950062' => array('9500629300291068',9,1), '950063' => array('9500639300800628',9,1), '950064' => array('9500649300993926',9,1), // 2013 standard - normal '980104' => array('9801047300709739',7,0), '980105' => array('9801057300249936',7,0), '980106' => array('9801067300119100',7,0), '980107' => array('9801077300009403',7,0), '980108' => array('9801087300176636',7,0), '980109' => array('9801097300173361',7,0), '980110' => array('9801107300987491',7,0), '980111' => array('9801117300041608',7,0), '980112' => array('9801127300907455',7,0), // 2013 studio - normal '980113' => array('9801136300019297',6,0), '980114' => array('9801146300953568',6,0), '980115' => array('9801156300054608',6,0), '980116' => array('9801166300387538',6,0), '980117' => array('9801176300559245',6,0), '980118' => array('9801186300983875',6,0), '980119' => array('9801196300445516',6,0), '980120' => array('9801206300502309',6,0), '980121' => array('9801216300152005',6,0) ); public static $win10creator_old_isid; public function __construct() { self::$aktivalasihibak = $GLOBALS['aktivalasihibak']; self::$kulcsprverzio = $GLOBALS['kulcsprverzio']; self::$win10creator_old_isid = $GLOBALS['win10creator_old_isid']; } public static function IsValidPassword($password) { if ($password=="") return false; $ph = popen(PATH_CODEGEN." -IsValidPassword ".$password, "r") or die( "A 'codegen' paranccsal nem veheto fel kapcsolat" ); $result = fgets($ph, 1024); pclose($ph); return ($result == 'true'); } public static function IsValidTimeCode($idokod) { if ($idokod=="") return false; $ph = popen(PATH_CODEGEN." -IsValidDealerCode ".$idokod, "r") or die( "A 'codegen' paranccsal nem veheto fel kapcsolat" ); $result = fgets($ph, 1024); pclose($ph); return ($result == 'true'); } public static function GetDayFromTimeCode($idokod) { $command = PATH_CODEGEN." -ParseTimeCode " . $idokod; $ph = popen($command, "r"); $result = fgets($ph, 1024); $result = (int)$result; pclose($ph); return $result; } public static function GetIsidFromTimeCode($idokod) { if(!self::IsValidTimeCode($idokod)) return ''; $arrIdokod=explode("-", $idokod); return $arrIdokod[1]; } public static function GetVeridFromPassword($password) { return substr($password, 7, 2); } public static function GetTypeFromPassword($password) { return substr($password, 6, 1); } public static function GeneratePassword($hlNum, $lan, $type, $version) { $country = substr($hlNum, 0, 2); $number = substr($hlNum, 2, 4); $type = (int)substr($type,0,1); $command = PATH_CODEGEN." -Password " . $country . $number . $version . $lan . $type; $ph = popen($command, "r") or die( "A 'codegen' paranccsal nem veheto fel kapcsolat" ); $password = fgets($ph, 1024); pclose($ph); return $password; } public static function GenerateTimeCode($pass,$isid,$numOfDays) { $command=PATH_CODEGEN." -GenerateTimeCode ".$pass." ".$isid." ".$numOfDays; $ph=popen($command, "r") or die( "A 'codegen' paranccsal nem veheto fel kapcsolat"); $aktkod=fgets($ph, 1024); pclose($ph); return ($aktkod); } public static function IsLiveKey($serial="") { return (substr($serial, 6,1) == 'L'); } public static function IsSoftwareKey($serial="") { if ($serial=="") return false; $ph = popen(PATH_CODEGEN." -IsSoftwareKey ".$serial, "r") or die("A 'codegen' paranccsal nem veheto fel kapcsolat"); $szoftveres = fgets($ph, 1024); return ($szoftveres == 'true'); } public static function AddOrUpdateComputer($npID) { crm_database::getInstance()->query("SELECT * FROM `".CRMADATBAZIS."`.`computers` WHERE `computer_id`='".$npID."' LIMIT 1;"); $res4=crm_database::getInstance()->fetchAssoc(); if(empty($res4)){ $comp=array( 'computer_id'=>$npID, 'last_mod'=>date('Y-m-d',time())); crm_database::getInstance()->insert("`".CRMADATBAZIS."`.`computers`",$comp); return crm_database::getInstance()->getInsertedId(); } else { crm_database::getInstance()->update("`".CRMADATBAZIS."`.`computers`",array('last_mod'=>date('Y-m-d',time())),array('computer_id'=>$npID)); return $res4[0]['id']; } } public static function AddHardlockComputer($hlnum, $compid, $verid) { if($verid >= 36) { crm_database::getInstance()->query("SELECT * FROM `".CRMADATBAZIS."`.`hardlock_computers` WHERE hlNum='".$hlnum."' AND computer_id='".$compid."' LIMIT 1;"); $res=crm_database::getInstance()->fetchAssoc(); if(empty($res)) { $comp=array( 'hlNum'=>$hlnum, 'computer_id'=>$compid); crm_database::getInstance()->insert("`".CRMADATBAZIS."`.`hardlock_computers`",$comp); } } } public static function AddToDebugTable($message) { $debug=array( 'data'=>$message, 'insert_date'=>date('Y-m-d H:i:s')); crm_database::getInstance()->insert("`".CRMADATBAZIS."`.`debug_table`",$debug); } public static function AddNonprofit($tomb=array()) { crm_database::getInstance()->insert("`".CRMADATBAZIS."`.`nonprofit`",$tomb); } public static function AddHardlock($tomb=array()) { crm_database::getInstance()->insert("`".CRMADATBAZIS."`.`hardlock`",$tomb); } public static function AddProgram($tomb=array()) { crm_database::getInstance()->insert("`".CRMADATBAZIS."`.`h_programs`",$tomb); } public static function GetTheFirstNotUsedHlNumFromInterval($minHlNum=0,$maxHlNum=0) { $ret=0; if ((int)$minHlNum==0 || (int)$maxHlNum==0) return($ret); crm_database::getInstance()->query("SELECT LEFT(hlNum,6) AS hlNum FROM `".CRMADATBAZIS."`.`hardlock` WHERE hlStat!=0 AND hlNum>=".(int)$minHlNum." AND hlNum<".(int)$maxHlNum." ORDER BY hlNum;"); $res=crm_database::getInstance()->fetchAssoc(); if (count($res)) { $allHlNums=range($minHlNum, $maxHlNum); foreach ($res as $r) { $usedHlNums[]=$r['hlNum']; } $notUsedHlNums=array_diff($allHlNums,$usedHlNums); reset($notUsedHlNums); $ret=current($notUsedHlNums); } else { $ret=0; } return $ret; } public static function GetVersion($tomb=array()) { $ret=array(); if (is_array($tomb) && count($tomb)) { crm_database::getInstance()->query("SELECT * FROM `".CRMADATBAZIS."`.`p_versions` WHERE `".key($tomb) ."`='".current($tomb)."' LIMIT 1;"); $ret=crm_database::getInstance()->fetchAssoc(); return ($ret[0]); } return ($ret); } function _Hibajelento($kuldo,$kulcs,$hiba="",$arrGCData=array(),$usstatid=NULL) { $tomb=array( "kulcs"=>$kulcs, "kuldo"=>$kuldo, "leiras"=>$hiba, "statusz"=>"uj", "datum"=>date('Y-m-d H:i:s',time()), "ip"=>$_SERVER['REMOTE_ADDR']); if (isset($usstatid) && (int)$usstatid>0) $tomb['usID']=$usstatid; if (count($arrGCData)) { if (isset($arrGCData['usGCMan'])) $tomb['usGCMan']=trim($arrGCData['usGCMan']); // graphic card manufacture if (isset($arrGCData['usGCType'])) $tomb['usGCType']=trim($arrGCData['usGCType']); // graphic card type if (isset($arrGCData['usGCDriverVer'])) $tomb['usGCDriverVer']=trim($arrGCData['usGCDriverVer']); // graphic card driver version } crm_database::getInstance()->insert(CRMADATBAZIS.'.h_aktivalas_infok',$tomb); } public static function _Getaktivalasikod($serial,$isid="",$idokod="") { $voltures = false; // van-e olyan aktiv program aminek ez a sorozatszama // a/b kulcsok miatt crm_database::getInstance()->query("SELECT prID, prStat, prActCode, prSellDate FROM `".CRMADATBAZIS."`.`h_programs` WHERE prPass='{$serial}'"); $ered2 = crm_database::getInstance()->fetchAssoc(); if(!$ered2) return "error: nincs ilyen password"; $szoftveres = self::IsSoftwareKey($serial); // Szoftveres-e 2019 crm_database::getInstance()->query("SELECT hlStat, hlID FROM `".CRMADATBAZIS."`.`hardlock` WHERE hlNum='".substr($serial,0,6)."'"); $res=crm_database::getInstance()->fetchAssoc(); $kulcs=$res[0]; if($kulcs['hlStat']!=1) { // a kulcs aktiv-e $valasz = "error: nem aktiv a program"; } else { // egyeb hiba if($kulcs['hlID'] == 64300 || $kulcs['hlID'] == 64897) { //ba Namirial Trial program kulcsa es BIMLadder program kulcsa $valasz = "error: hianyzo kod"; return $valasz; } else { foreach($ered2 as $program) { if ($program['prSellDate'] == "0000-00-00" || $program['prSellDate'] == NULL ) { // van-e eladasi datum $valasz = "error: nincs vasarlasi idopont"; } elseif ($program['prActCode'] != "") { // neki megfelelo aktivalasi kod if ($szoftveres) { self::$win10creator_old_isid=substr($program['prActCode'],5,4); $isidOK = (substr($program['prActCode'],5,4)==$isid); if(!$isidOK && substr($program['prActCode'],7,2) == substr($isid,2,2)) { $elteltnapok = 0; sscanf(substr($idokod,11,2),'%02x',$elteltnapok); $elteltnapok+=self::Convert(substr($idokod,10,1))*256; $engedelyezettnapok = 0; sscanf(substr($program['prActCode'],11,2),'%02x',$engedelyezettnapok); $engedelyezettnapok+=self::Convert(substr($program['prActCode'],10,1))*256; if($engedelyezettnapok > $elteltnapok ) { $valasz = "error: win10 creator"; break; } } if ($isidOK) { $valasz = $program['prActCode']; // aktualis aktivalasi kod break; } else { $valasz = 'error: masik gep van regisztralva'; } } else { $valasz = $program['prActCode']; // hardveres kulcs eseten egybol visszaadja az aktualis aktivalasi kodot break; } } else { $valasz = "error: hianyzo kod"; // nincs beirva a kod $voltures = true; } } } } if ($voltures === true && $valasz == "error: masik gep van regisztralva") { // LAN-os szoftver kulcsos liszensznel ha ezt a liszenszt nem talaltuk de volt ures liszensz, akkor csinalja ezt $valasz = "error: hianyzo kod"; } // Kivetel: 30, 34, 39, 41, 43 kulcsok, amik soha nem kapnak tolunk automata hosszabbitast. // csak a hibat adom vissza if( self::_Get_aktkod($serial) === true || substr($valasz,0,5) == "error" ) { return $valasz; } else { return; } } public static function _Get_aktkod($kulcs) { // isCodeReplyEnabled(hlNum:str(6)) // 2017.12.13. F.Zs. // Ezekre az esetekre ad vissza TRUE-t a fuggveny (version tabla 1182-es rekord): 30;34;36;38;40;41;42;43;44;47;48;49;82;88;93;94;95;97;98;99; // 39 - Olaszorszag szandekosan hianyzik, amig a volume contract fennall! if(self::IsLiveKey($kulcs)) { // A live-ok mindig kommunikalnak a szerverrel 2019 return true; } $kulcs = substr($kulcs,0,6); // a lekerdezes vagy egy mezot ad vissza ver_id=1182 vagy semmit // pl: SELECT ver_id FROM `www_archline_hu`.`version` WHERE ver_id=1182 AND (`usertype` LIKE '%;360012;%' OR `usertype` LIKE '%;36;%' OR LEFT(`usertype`,3)='36;'); crm_database::getInstance()->query("SELECT ver_id FROM `".JMLADATBAZIS."`.`version` WHERE ver_id=".ACT_VERSION_ID." AND (`usertype` LIKE '%;".$kulcs.";%' OR `usertype` LIKE '%;".substr($kulcs,0,2).";%' OR LEFT(`usertype`,3)='".substr($kulcs,0,2).";')"); $res=crm_database::getInstance()->fetchAssoc(); $re=(object)$res[0]; $ret=( (is_numeric($re->ver_id) && $re->ver_id>0) ? TRUE : FALSE); return ($ret); } public static function GetDayInterval($mettol, $meddig) { $command3 = PATH_CODEGEN." -DiffDay ".$mettol." ".$meddig; $ph = popen($command3, "r") or die( "A 'codegen' paranccsal nem veheto fel kapcsolat" ); $napok = fgets($ph, 1024); pclose($ph); return $napok; } public static function _Password_gen($hlNum, $lan, $type, $version = 64) { $country = substr($hlNum, 0, 2); $number = substr($hlNum, 2, 4); if($type == 76) // Live $type = 'L'; else $type = (int)substr($type,0,1); if(substr($hlNum,0,1)=="9") $lan=0; //ba ez 2018.11.27.tol a bimladder trial kodja! if($country=='91') { return '9100014260913946'; } $command = PATH_CODEGEN." -Password " . $country . $number . $version . $lan . $type; $ph = popen($command, "r") or die( "A 'codegen' paranccsal nem veheto fel kapcsolat" ); $password = fgets($ph, 1024); pclose($ph); return $password; } public static function _Ujtempprogram($adatbazis, $kulcs) { $hlNum = $kulcs->hlNum; if ($hlNum>'' && !array_key_exists($hlNum,self::$kulcsprverzio)) { // hiba, nincs beallitva hogy mit hozzon letre $err=array( "osztaly"=>"version", "fv"=>"_ujtempprogram", "hiba"=>"Kulcs: {$hlNum}\nnincs beallitva hogy milyen programot hozzon letre", "datum"=>date('Y-m-d H:i:s',time())); crm_database::getInstance()->insert("`".JMLADATBAZIS."`.`a_hibak`",$err); return; } $adatok = self::$kulcsprverzio[$hlNum]; $prTypeID = $adatok[1]; $prContact = $adatok[2]; $prVerCode = 70; // 2013-as program $prVerID = 13; // 2013-as program $hlNum = $kulcs->hlNum; $ctrID = $kulcs->hlCtrID; $hlLan = $kulcs->hlLan; $password = self::_Password_gen($hlNum, $hlLan, $prTypeID, $prVerCode); // program felvetele $ujprogram = array( "prHlNum" => $hlNum, "prTypeID" => $prTypeID, "prSellDate" => date("Y-m-d"), "prContact" => $prContact, "prPass" => $password, "prLan" => $hlLan, "prLastMod" => date("Y-m-d H:i:s"), "prVerID" => $prVerID, "prInfo" => "automatikusan letrehozva (weben), Share It", "prCtrID" => $ctrID, "prHiType" => 1 ); crm_database::getInstance()->insert(CRMADATBAZIS.".h_programs",$ujprogram); $err2=array( "osztaly"=>"version", "fv"=>"_ujtempprogram", "hiba"=>"Uj program letrehozva, Share It-es, kulcs: {$hlNum}", "datum"=>date('Y-m-d H:i:s',time())); crm_database::getInstance()->insert("`".JMLADATBAZIS."`.`a_hibak`",$err2); // szoftveres kulcsnal annyi program, ahany lanos if (substr($hlNum,0,1)=="9" && $hlLan>1) { for($i=1;$i<$hlLan;$i++) { crm_database::getInstance()->insert(CRMADATBAZIS.".h_programs",$ujprogram); } } crm_database::getInstance()->insert(CRMADATBAZIS.".h_history",array( "hiHlNum" => $hlNum, "hiDate" => date("Y-m-d"), "hiManID" => 0, "hiTypeID" => 2, "hiCtrID" => $ctrID )); crm_database::getInstance()->update(CRMADATBAZIS.'.hardlock',array('hlStat'=>1),array('hlNum'=>$hlNum)); return true; } public static function Ujaktivalasikod2($serial,$isid,$idokod) { // ha uresek a parameterek, akkor az urlbol veszi if(!$serial) $serial = ''.$_GET['serial']; // segment(3); if(!$isid) $isid = ''.$_GET['isid']; // segment(4); if(!$idokod) $idokod = ''.$_GET['kod']; // segment(5); // isid kiegeszitese while(strlen($isid)<4) $isid = "0".$isid; $szoftveres = self::IsSoftwareKey($serial); // Szoftveres-e 2019 $valasz = self::_Getaktivalasikod($serial,$isid,$idokod); // csak azok kapnak automatikusan kodot, akiknek megengedjuk vagy akiknel hiba van if(self::_Get_aktkod($serial)!==true && ($valasz=='error: hianyzo kod' || !in_array($valasz,self::$aktivalasihibak))) { // azoknal lep ki return-el, akiknek nem jar kod (pl. olaszok) es nincs veluk problema (nem kap error-t) return; } $elteltnap = self::GetDayFromTimeCode($idokod); if(!is_numeric($elteltnap) && $szoftveres) { self::_Hibajelento("ujaktivalasikod2",substr($serial,0,6),"(megjegyzes) telepites idejet nem tudtam megallapitani (isid: {$isid}, idokod: {$idokod}, elteltnap: {$elteltnap})"); $elteltnap = 0; // ennek itt semmi ertelme, mert return-al visszater $this->aktivalasihibak['not_act_prg'] return 'error: nem aktiv regisztracio'; // - 2013. 10. 21. } $timeelteltnap = 60*60*24*$elteltnap; if($valasz == 'error: win10 creator') { // aktivalasi kod torlese crm_database::getInstance()->query("UPDATE `".CRMADATBAZIS."`.`p_serial_isid` SET `isid`=NULL WHERE serial = '".$serial."' AND isid = '".self::$win10creator_old_isid."' LIMIT 1;"); crm_database::getInstance()->query("UPDATE `".CRMADATBAZIS."`.`h_programs` SET `prActCode`=NULL,`prActDate`=NULL WHERE `prPass`='".$serial."' AND SUBSTR(prActCode,6,4)='".self::$win10creator_old_isid."' LIMIT 1;"); $valasz = 'error: hianyzo kod'; } $namirialtrial = (substr($serial,0,6) == '930001'); $bimladdertrial = (substr($serial,0,6) == '910001'); // a paros benne van-e a tablaban, regisztralva van-e crm_database::getInstance()->query("SELECT id, aktiv, datum FROM `".CRMADATBAZIS."`.`p_serial_isid` WHERE serial='{$serial}' AND isid ='{$isid}' ORDER BY datum DESC"); $ered=crm_database::getInstance()->fetchAssoc(); if(!$namirialtrial && !$bimladdertrial) { if(count($ered)!=1) { // regisztraljuk ha nincs benne es meg van szabad regisztracio (lan-os) // a max(hlLan) ertelmetlen, mivel a hardlock tablaban a hlNum az egyedi azonosito is, igy ertelmetlen a csoportositas /* ez a blokk be kell keruljon az if ($szoftveres) agon belulre */ crm_database::getInstance()->query("SELECT max(hlLan) hlLan FROM `".CRMADATBAZIS."`.`hardlock` WHERE hlNum='".substr($serial,0,6)."'"); $res=crm_database::getInstance()->fetchAssoc(); $querydb=$res[0]; $maxtelepites = ($querydb['hlLan']==0) ? 1 : $querydb['hlLan']; crm_database::getInstance()->query("SELECT id FROM `".CRMADATBAZIS."`.`p_serial_isid` WHERE serial='{$serial}' AND isid!='' AND isid IS NOT NULL"); $telepitett = crm_database::getInstance()->fetchAssoc(); /* ez a blokk be kell keruljon az if ($szoftveres) agon belulre */ if($szoftveres && count($telepitett)>=$maxtelepites) { $ret=($querydb['hlLan']>1 ? "error: tul sok telepites" : "error: masik gep van regisztralva"); return ($ret); } $regtelepites = date('Y-m-d H:i:s',(time())-$timeelteltnap); crm_database::getInstance()->insert(CRMADATBAZIS.'.p_serial_isid',array( "serial"=>$serial, "isid"=>$isid, "kod"=>$idokod, "datum"=>$regtelepites, "ip"=>$_SERVER['REMOTE_ADDR'], "aktiv"=>1)); } elseif($ered[0]['aktiv']!=1) { return "error: nem aktiv regisztracio"; } else { $regtelepites = substr($ered[0]['datum'],0,10); } } // ha Share-It-es meg nem letezo program if($valasz == "error: nincs ilyen password" && $serial>'' && array_key_exists(substr($serial,0,6),self::$kulcsprverzio)) { crm_database::getInstance()->query("SELECT * FROM ".CRMADATBAZIS.".hardlock WHERE hlNum='".substr($serial,0,6)."'"); $res=crm_database::getInstance()->fetchAssoc(); $kulcs=(object)$res[0]; self::_Ujtempprogram(CRMADATBAZIS, $kulcs); $valasz = "error: hianyzo kod"; } // ha nincs aktivalasi kodja, akkor generalni neki if($valasz == "error: hianyzo kod") { crm_database::getInstance()->query("SELECT * FROM `".CRMADATBAZIS."`.`h_programs` WHERE prPass='{$serial}'"); $res=crm_database::getInstance()->fetchAssoc(); $program=(object)$res[0]; if($namirialtrial || $bimladdertrial) { $timeMettol = time()-$timeelteltnap; $mettol = date('Y-m-d',$timeMettol); if($program->prFizetve) { $fizetvetime = strtotime($program->prFizetve); $meddig = date('Y-m-d',$fizetvetime); // vege - telepites } else { return "error: nincs kifizetve"; } $napok = self::GetDayInterval($mettol, $meddig); $aktkod = self::GenerateTimeCode($serial, $isid, $napok); $aktkod=(self::IsValidTimeCode($aktkod) ? $aktkod : ''); return $aktkod; } else { $timeszerzodes = strtotime($program->prSellDate); $timetelepites = time()-$timeelteltnap; $maxtelepites = max($timeszerzodes,$timetelepites); $maxdatetelepites = date('Y-m-d',$maxtelepites); if(!$szoftveres && $program->prSellDate!='' && $program->prSellDate!='0000-00-00') { $maxdatetelepites = substr($program->prSellDate,0,10); } if($program->prFizetve) { $fizetvetime = strtotime($program->prFizetve); $meddig = date('Y-m-d',$fizetvetime); // vege - telepites } elseif (substr($serial,0,2)=="99" || ($serial>'' && array_key_exists(substr($serial,0,6),self::$kulcsprverzio))) { $meddig = date('Y-m-d',time() + 30*24*60*60); // eloszor 30 napot kap } else { return "error: nincs kifizetve"; } // mostani ido nagyobb mint ameddig jar if( date('Y-m-d',time()) > $meddig ) { return $valasz; } $napok = self::GetDayInterval($maxdatetelepites, $meddig); if($serial>'' && array_key_exists(substr($serial,0,6),self::$kulcsprverzio)) $napok = 30; if($meddig == '2050-01-01') $napok=3583; $aktkod = self::GenerateTimeCode($serial, $isid, $napok); $aktkod=(self::IsValidTimeCode($aktkod) ? $aktkod : ''); $serial = trim(addslashes($serial)); crm_database::getInstance()->query("SELECT hlCtrID FROM ".CRMADATBAZIS.".hardlock WHERE hlNum='".substr($serial,0,6)."'"); $res=crm_database::getInstance()->fetchAssoc(); $hl=(object)$res[0]; $hlctrid = $hl->hlCtrID; crm_database::getInstance()->query("UPDATE `".CRMADATBAZIS."`.`h_programs` SET `prActCode`='{$aktkod}', prActDate='{$maxdatetelepites}', prFizetve='{$meddig}' WHERE `prPass`='{$serial}' AND (prActCode='' OR prActCode IS NULL) LIMIT 1"); // internetes aktivalas esem�ny crm_database::getInstance()->insert(CRMADATBAZIS.".h_history",array( "hiHlNum"=>$program->prHlNum, "hiDate"=>date('Y-m-d',time()), "hiManID"=>0, "hiTypeID"=>16, "hiTime"=>date('Y-m-d H:i:s',time()), )); self::_Hibajelento("ujaktivalasikod2",substr($serial,0,6),"felvettem: {$query}"); } return $aktkod; } return $valasz; } public static function Convert($betu) { $ret=0; switch (strtoupper($betu)) { case 'A' : { $ret=0; break; } case 'B' : { $ret=1; break; } case 'C' : { $ret=2; break; } case 'D' : { $ret=3; break; } case 'E' : { $ret=4; break; } case 'F' : { $ret=5; break; } case 'G' : { $ret=6; break; } case 'H' : { $ret=7; break; } case 'I' : { $ret=8; break; } case 'J' : { $ret=9; break; } case 'K' : { $ret=10; break; } case 'L' : { $ret=11; break; } case 'M' : { $ret=12; break; } case 'N' : { $ret=13; break; } } return ($ret); } } ?>