= 0){ return 0.10; } if(ymdcmp($cyear, $cmonth, $cday, 2014, 4, 1) >= 0){ return 0.08; } return 0.05; } //現在の消費税を返す function cmn_getZei8($ymd = "0000-00-00") { if(substr($ymd,0,4) == "0000"){ //現在 $date = getdate(); $cyear = date("Y"); $cmonth = date("m"); $cday = date("d"); } else { //指定日 $cyear = substr($ymd,0,4); $cmonth = substr($ymd,5,2); $cday = substr($ymd,8,2); } if(ymdcmp($cyear, $cmonth, $cday, 2014, 4, 1) > 0){ return 0.08; } return 0.08; } //----------------------------------------------------------------------- // 10を16進に 1バイト分 //----------------------------------------------------------------------- function cmn_toHEX($num){ $hex = dechex($num); if (strlen($hex) == 1){ $hex = "0".$hex; } return $hex; } //----------------------------------------------------------------------- // 0-9の数字しか無いか? // true=数字のみ //----------------------------------------------------------------------- function cmn_isINT($num){ if(preg_match("/^[0-9]+$/", $num)){ return true; } return false; } //----------------------------------------------------------------------- // 2011/3/24,17:15:00 -> 2011-03-24 17:15:00 //----------------------------------------------------------------------- function myymd2DBymd($ymd) { $ymdhms = split(",", $ymd); $ymd = split("/", $ymdhms[0]); $hms = split(":", $ymdhms[1]); return sprintf("%04d",$ymd[0])."-".sprintf("%02d",$ymd[1])."-".sprintf("%02d",$ymd[2])." ".sprintf("%02d",$hms[0]).":".sprintf("%02d",$hms[1]).":".sprintf("%02d",$hms[2]); } //----------------------------------------------------------------------- // 2011-03-24 17:15:00 日時分が妥当か判定する また最後に正常な yyyy/mm/dd hh:mm:ssを返す // 1=OK //----------------------------------------------------------------------- function isMyYMDHMS(&$ymd) { $ymdhms = split(" ", $ymd); $str = split('-', $ymdhms[0]); $y1 = $str[0]; $m1 = $str[1]; $d1 = $str[2]; if(isDateString($y1."/".$m1."/".$d1) == 0) return 0; if($y1 < 2010 || $y1 > 2200){ return 0; } $str = split(':', $ymdhms[1]); $hh1 = $str[0]; $mm1 = $str[1]; $ss1 = $str[2]; if($hh1 < 0 || $hh1 > 23 || $mm1 < 0 || $mm1 > 59 || $ss1 < 0 || $ss1 > 59) return 0; $ymd = sprintf("%04d",$y1)."-".sprintf("%02d",$m1)."-".sprintf("%02d",$d1)." ".sprintf("%02d",$hh1).":".sprintf("%02d",$mm1).":".sprintf("%02d",$ss1); return 1; } //----------------------------------------------------------------------- // 簡易入力の日時を生成する // &$ymd[] 生成したymdの格納 // $asa この人の朝 // 戻り値 リスト数 //----------------------------------------------------------------------- function cmn_make_inputmode_easy_ymd(&$ymds, &$ymds_d, $d_asa, $d_hiru, $d_yu){ $date = getdate(); $cyear = date("Y"); $cmonth = date("m"); $cday = date("d"); $chh = date("H"); $cmm = date("i"); $css = date("s"); $youbi = get_youbi("$cyear/$cmonth/$cday", 1); //漢字 //開始日 $symd = "$cyear/$cmonth/$cday"; //簡易入力モード //まず //朝 1-10 昼11-15 夕16-23 という前提 //現在時刻からすすめて出てきた 0朝 1昼 2夕 スタートとなる //たとえば 0:00なら+1の1時くらいからスタート //たとえば 0:59なら+2の2時くらいからスタート //つまり分を見て判断 if($cmm > 30){ $shour = $chh + 2; } else { //そのまま $shour = $chh + 1; } $sday = $cday; if($shour > 23){ $shour = $shour - 24; //開始日+1 $symd = get_pm_ymd($symd, 1); } //該当時刻があるかをチェック $nexttype = 0; for($i = 0; $i < 24; $i++){ if($d_asa == $shour){ break; } if($d_hiru == $shour){ $nexttype = 1; break; } if($d_yu == $shour){ $nexttype = 2; break; } $shour += 1; if($shour > 23){ $shour = 0; //開始日+1 $symd = get_pm_ymd($symd, 1); } } //一応3日分選択させてあげる $pymds = 0; //トリガー日時インデックス for($d = 0; $d < 3; $d++){ //タイプ初期化 $t = $nexttype; for($i = 0; $i < 3; $i++){ //分解 $dt = strtotime($symd); $y1 = date("Y", $dt); $m1 = date("n", $dt); $d1 = date("j", $dt); $syoubi = get_youbi($symd, 1); //漢字 //選択しセット switch($t){ case 0: //朝 //起動時刻決定 //$d_asaに時刻はあるが柔らかく分散させる $temp = cmn_rndInt(0, 59); if($temp < 30){ //前の時刻 $hh = sprintf("%02d",$d_asa - 1); $mm = sprintf("%02d",59 - $temp); $ss = "00"; } else { //ふつーに $hh = sprintf("%02d",$d_asa); $mm = sprintf("%02d",$temp - 30); $ss = "00"; } $ymds[$pymds] = $symd.",".$hh.":".$mm.":".$ss; $ymds_d[$pymds] = $d1."日(".$syoubi.")の朝\n"; break; case 1: //昼 $temp = cmn_rndInt(0, 59); if($temp < 30){ //前の時刻 $hh = sprintf("%02d",$d_hiru - 1); $mm = sprintf("%02d",59 - $temp); $ss = "00"; } else { //ふつーに $hh = sprintf("%02d",$d_hiru); $mm = sprintf("%02d",$temp - 30); $ss = "00"; } $ymds[$pymds] = $symd.",".$hh.":".$mm.":".$ss; $ymds_d[$pymds] = $d1."日(".$syoubi.")の昼\n"; break; case 2: //夕 $temp = cmn_rndInt(0, 59); if($temp < 30){ //前の時刻 $hh = sprintf("%02d",$d_yu - 1); $mm = sprintf("%02d",59 - $temp); $ss = "00"; } else { //ふつーに $hh = sprintf("%02d",$d_yu); $mm = sprintf("%02d",$temp - 30); $ss = "00"; } $ymds[$pymds] = $symd.",".$hh.":".$mm.":".$ss; $ymds_d[$pymds] = $d1."日(".$syoubi.")の夕\n"; //次は翌日になる $symd = get_pm_ymd($symd, 1); break; } //トリガー日時インデックス加算 $pymds += 1; //次の朝昼夕へ $t++; if($t == 3){ $t = 0; } } } return $pymds; } //----------------------------------------------------------------------- // ランダム値を返す //----------------------------------------------------------------------- function cmn_rndInt($s, $e){ return mt_rand($s, $e); } //----------------------------------------------------------------------- // ランダム文字列を返す //----------------------------------------------------------------------- function cmn_rndString($len){ srand(time()); $szps = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $szstr = ""; for($i = 0; $i < $len; $i++){ $szstr .= substr($szps, mt_rand(0, strlen($szps) - 1), 1); } return $szstr; } //----------------------------------------------------------------------- // ランダム数値を返す //----------------------------------------------------------------------- function cmn_rndNum($len){ srand(time()); $szps = "0123456789"; $szstr = ""; for($i = 0; $i < $len; $i++){ $szstr .= substr($szps, mt_rand(0, strlen($szps) - 1), 1); } return $szstr; } #========================================================================= # url妥当性チェック function isUrl($url) { $regex = "/^https?:\/\/([A-Za-z0-9;\?:@&=\+\$,\-_\.!~\*'\(\)%]+)(:\d+)?(\/?[A-Za-z0-9;\/\?:@&=\+\$,\-_\.!~\*'\(\)%#])*$/D"; if(preg_match($regex, $url, $matches)){ $array = explode(".", $matches[1]); if(count($array) == 1){ return ""; } // .が無い if(in_array("", $array)){ return ""; } // .が最初か最後か連続 return $url; } return ""; if (!preg_match('/^(http|https?|ftp):\/\/[\w+$\;?-\/.%,!#~*:@&=]+$/', $url)) { $url = ''; } return $url; } #========================================================================= # 1 = 2 ---- 0 # 1 < 2 ---- -1 # 1 > 2 ---- 1 function ymdcmp($y1, $m1, $d1, $y2, $m2, $d2) { if($y1 < $y2){ return -1; } if($y1 > $y2){ return 1; } #y1 == y2 if($m1 < $m2){ return -1; } if($m1 > $m2){ return 1; } #m1 == m2 if($d1 < $d2){ return -1; } if($d1 > $d2){ return 1; } return 0; } function ymdcmp2($ymd1, $ymd2) { $dt = strtotime($ymd1); $y1 = date("Y", $dt); $m1 = date("n", $dt); $d1 = date("j", $dt); $dt = strtotime($ymd2); $y2 = date("Y", $dt); $m2 = date("n", $dt); $d2 = date("j", $dt); return ymdcmp($y1, $m1, $d1, $y2, $m2, $d2); } #========================================================================= # 1 = 2 ---- 0 # 1 < 2 ---- -1 # 1 > 2 ---- 1 function ymdtimecmp($y1, $m1, $d1, $hh1, $mm1, $y2, $m2, $d2, $hh2, $mm2) { $rc = ymdcmp($y1, $m1, $d1, $y2, $m2, $d2); if($rc != 0){ return $rc; } if($hh1 < $hh2){ return -1; } if($hh1 > $hh2){ return 1; } if($mm1 < $mm2){ return -1; } if($mm1 > $mm2){ return 1; } return 0; } #========================================================================= # 文字のymd hms取得 function get_ymd($sp = "/") { $date = getdate(); $cyear = date("Y"); $cmonth = date("m"); $cday = date("d"); return "$cyear".$sp."$cmonth".$sp."$cday"; } #========================================================================= # 文字のymd hms取得 function get_ymdhms($sp = "/") { $date = getdate(); $cyear = date("Y"); $cmonth = date("m"); $cday = date("d"); $chh = date("H"); $cmm = date("i"); $css = date("s"); return "$cyear".$sp."$cmonth".$sp."$cday"." $chh:$cmm:$css"; } #========================================================================= #月の日数を得る function get_nissu($ymd) { return date("t", strtotime($ymd)); } function get_MonthDays($y1,$m1) { $leap1 = array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); $leap2 = array(0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); if($y1%4 == 0 && $y1%100 != 0 || $y1%400 == 0){ #閏年 return $leap2[$m1]; } else { return $leap1[$m1]; } } #========================================================================= # yy/mm/ddが妥当か否かを返す function isDateString($ymd) { $leap1 = array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); $leap2 = array(0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); $ymdhms = split(" ", $ymd); $ymd = $ymdhms[0]; $str = split('/', $ymd); $y1 = $str[0]; $m1 = $str[1]; $d1 = $str[2]; if(strlen($m1) == 2 && $m1[0] == "0") $m1 = $m1[1]; if(strlen($d1) == 2 && $d1[0] == "0") $d1 = $d1[1]; if($y1 < 0 || $m1 < 1 || $m1 > 12 || $d1 < 1 || $d1 > 31) return 0; if($y1%4 == 0 && $y1%100 != 0 || $y1%400 == 0){ #閏年 if($d1 > $leap2[$m1]) return 0; return 1; } else { if($d1 > $leap1[$m1]){ return 0; } return 1; } return 0; } #========================================================================= #曜日を得る function get_youbi($ymd,$i) { $week = array('日','月','火','水','木','金','土'); if(isDateString($ymd) == 1) $youbi = date("w", strtotime($ymd)); else { $youbi = 0; } if($i == 0){ //インデックスを返す return $youbi; } else { //漢字を返す return $week[$youbi]; } } //========================================================================= //月スライド function cmn_getSlideMonth(&$yy, &$mm, $slide){ while($slide != 0){ if($slide < 0){ //過去 $slide += 1; $mm -= 1; if($mm == 0){ $mm = 12; $yy -= 1; } } else if($slide > 0){ //未来 $slide -= 1; $mm += 1; if($mm == 13){ $mm = 1; $yy += 1; } } } } #========================================================================= #指定した年月日より+/-N日のymd(current ymd, +/-days) --> new ymd; function get_pm_ymd($ymd,$day) { $dt = strtotime($ymd); $y1 = date("Y", $dt); $m1 = date("n", $dt); $d1 = date("j", $dt); if($day < 0){ #過去へ while($day != 0){ --$d1; if($d1 == 0){ #前月の最終日 --$m1; if($m1 == 0){ $y1--; $m1 = 12; } $d1 = get_MonthDays($y1,$m1); } ++$day; } return $y1."/".$m1."/".$d1; } if($day > 0){ #未来へ while($day != 0){ $ntemp = get_MonthDays($y1,$m1); ++$d1; if($d1 > $ntemp){ #翌月 $d1 = 1; ++$m1; if($m1 == 13){ $y1++; $m1 = 1; } } --$day; } return $y1."/".$m1."/".$d1; } return $ymd; } //========================================================================= // 経過秒を返す //========================================================================= function get_pastMinute($ymd1, $ymd2) { $y1 = date("Y", strtotime($ymd1)); $m1 = date("n", strtotime($ymd1)); $d1 = date("j", strtotime($ymd1)); $hh1 = date("G", strtotime($ymd1)); $mm1 = date("i", strtotime($ymd1)); $y2 = date("Y", strtotime($ymd2)); $m2 = date("n", strtotime($ymd2)); $d2 = date("j", strtotime($ymd2)); $hh2 = date("G", strtotime($ymd2)); $mm2 = date("i", strtotime($ymd2)); if(ymdtimecmp($y1, $m1, $d1, $hh1, $mm1, $y2, $m2, $d2, $hh2, $mm2) >= 0){ return 0; } $rc = 0; if(ymdcmp($y1, $m1, $d1, $y2, $m2, $d2) == 0){ #same day $rc = (((24 - $hh1) * 60) - $mm1) - (((24 - $hh2) * 60) - $mm2); return $rc; } $ymd = "$y1/$m1/$d1"; while(1){ $ymd = get_pm_ymd($ymd,1); $y1 = date("Y", strtotime($ymd)); $m1 = date("n", strtotime($ymd)); $d1 = date("j", strtotime($ymd)); if(ymdcmp($y1, $m1, $d1, $y2, $m2, $d2) >= 0){ break; } $rc += 1440; } $rc += (($hh2 * 60) + $mm2); $rc += (((24 - $hh1) * 60) - $mm1); return $rc; } //----------------------------------------------------------------------- // ランダム文字列生成 //----------------------------------------------------------------------- function cmn_rand_str($keta){ if(!$keta){ $keta = 8; } mt_srand((double)microtime()*1000000); //乱数初期化 //英数混在 for($i=0,$str=null;$i<$keta;){ //ループ $num=mt_rand(0x00,0x7A); //ASCIIコードで0-9a-zA-Z:;<=>?@[\]^_`の部分 if((0x30<$num&&$num<0x39) || (0x41<$num&&$num<0x5A)){ //文字コード英数の範囲内なら $str.=chr($num); //$strの後ろにキャラクタに変更して追加。 $i++; //文字数カウンタをインクリメント } } return ($str); //strを返す } //----------------------------------------------------------------------- // ランダム数列生成 //----------------------------------------------------------------------- function cmn_rand_num($keta){ if(!$keta){ $keta = 8; } srand(time()); $szps = "0123456789"; $szstr = ""; for($i = 0; $i < $keta; $i++){ $szstr .= substr($szps, mt_rand(0, strlen($szps) - 1), 1); } return $szstr; } //----------------------------------------------------------------------- // 文字列から指定の文字で区切られたn番目の文字列を抜き出す // n=1スタート // \nはEOFとする // 戻り値 文字 //----------------------------------------------------------------------- function cmn_GetStringCSV($str, $no, $sep){ $sztemp = ""; if($no < 1){ return $sztemp; } //n番目の先頭までポインタを移動する $n = 1; $ptr = 0; while(1){ if($no == $n) break; if($ptr >= strlen($str)) break; if($str[$ptr] == $sep) $n += 1; $ptr += 1; } //n番目まで移動できなかった場合は終了 if($n != $no) return $sztemp; //抽出 while(1){ if($ptr >= strlen($str)) break; if($str[$ptr] == $sep) break; $sztemp .= $str[$ptr]; $ptr += 1; } return $sztemp; } //----------------------------------------------------------------------- // 文字列から指定の文字で区切られたn番目以降を全て抜き出す // n=1スタート // \nはEOFとする // 戻り値 文字 //----------------------------------------------------------------------- function cmn_GetStringCSVAfterAll($str, $no, $sep){ $sztemp = ""; if($no < 1){ return $sztemp; } //n番目の先頭までポインタを移動する $n = 1; $ptr = 0; while(1){ if($no == $n) break; if($ptr >= strlen($str)) break; if($str[$ptr] == $sep) $n += 1; $ptr += 1; } //n番目まで移動できなかった場合は終了 if($n != $no) return $sztemp; //抽出 while(1){ if($ptr >= strlen($str)) break; $sztemp .= $str[$ptr]; $ptr += 1; } return $sztemp; } //----------------------------------------------------------------------- // 簡易暗号化 $keyは数列 //----------------------------------------------------------------------- function cmn_tinyencode($str){ $szbuf = base64_encode($str); $sztemp = ""; //数列毎に無用の文字を追加する for($i = 0; $i < strlen($szbuf); $i++){ if($szbuf[$i] == "+"){ $sztemp .= "@"; } else if($szbuf[$i] == "/"){ $sztemp .= "."; } else { $sztemp .= $szbuf[$i]; } } return $sztemp; } //----------------------------------------------------------------------- // 復号化 //----------------------------------------------------------------------- function cmn_tinydecode($szbuf){ $sztemp = ""; $i = 0; while(strlen($szbuf) > $i){ if($szbuf[$i] == "@"){ $sztemp .= "+"; } else if($szbuf[$i] == "."){ $sztemp .= "/"; } else { $sztemp .= $szbuf[$i]; } $i += 1; } return base64_decode($sztemp); } //----------------------------------------------------------------------- // 暗号化 //----------------------------------------------------------------------- function cmn_encode($str, $type = 0){ if(strlen($str) == 0) return ""; $base = "カロナセンスのコーヒーは滅茶苦茶旨い"; $ptr = 0; $buf = $str; //次にここで暗号化 for($i = 0; $i < strlen($str); $i++){ $buf[$i] = $buf[$i] ^ $base[$ptr]; $ptr += 1; if($ptr >= strlen($base)){ $ptr = 0; } } $szbuf = base64_encode($buf); //generic_encodeで暗号化 $szbuf = cmn_mcrypt_generic_encode($szbuf); //さらに $szbuf = base64_encode($szbuf); //障害文字を消去 $sztemp = ""; //数列毎に無用の文字を追加する for($i = 0; $i < strlen($szbuf); $i++){ if($szbuf[$i] == "+"){ $sztemp .= "@"; } else if($szbuf[$i] == "/"){ $sztemp .= "."; } else { $sztemp .= $szbuf[$i]; } } return $sztemp; } //----------------------------------------------------------------------- // 復号化 //----------------------------------------------------------------------- function cmn_decode($str, $type = 0){ if(strlen($str) == 0) return ""; $base = "カロナセンスのコーヒーは滅茶苦茶旨い"; //障害文字を復旧 $sztemp = ""; $i = 0; while(strlen($str) > $i){ if($str[$i] == "@"){ $sztemp .= "+"; } else if($str[$i] == "."){ $sztemp .= "/"; } else { $sztemp .= $str[$i]; } $i += 1; } $buf = base64_decode($sztemp); $buf = cmn_mcrypt_generic_decode($buf); $buf = base64_decode($buf); $ptr = 0; for($i = 0; $i < strlen($buf); $i++){ $buf[$i] = $buf[$i] ^ $base[$ptr]; $ptr += 1; if($ptr >= strlen($base)){ $ptr = 0; } } return $buf; } //----------------------------------------------------------------------- // mcrypt_generic暗号化ロジック //----------------------------------------------------------------------- function cmn_mcrypt_generic_encode($plain_text){ /* データ */ $key = 'narukichiemi'; /* モジュールをオープンし、IV を作成します */ $td = mcrypt_module_open('des', '', 'ecb', ''); $key = substr($key, 0, mcrypt_enc_get_key_size($td)); $iv_size = mcrypt_enc_get_iv_size($td); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); /* 暗号化ハンドルを初期化します */ if (mcrypt_generic_init($td, $key, $iv) != -1) { /* データを暗号化します */ $c_t = mcrypt_generic($td, $plain_text); /* 後始末をします */ mcrypt_generic_deinit($td); mcrypt_module_close($td); return $c_t; } return $plain_text; } function cmn_mcrypt_generic_decode($c_t){ /* データ */ $key = 'narukichiemi'; /* モジュールをオープンし、IV を作成します */ $td = mcrypt_module_open('des', '', 'ecb', ''); $key = substr($key, 0, mcrypt_enc_get_key_size($td)); $iv_size = mcrypt_enc_get_iv_size($td); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); /* 暗号化ハンドルを初期化します */ if (mcrypt_generic_init($td, $key, $iv) != -1) { /* 復号のため、バッファを再度初期化します */ mcrypt_generic_init($td, $key, $iv); $p_t = mdecrypt_generic($td, $c_t); /* 後始末をします */ mcrypt_generic_deinit($td); mcrypt_module_close($td); return $p_t; } return $c_t; } ?>