Skip to content

Instantly share code, notes, and snippets.

@junichi11
Created April 19, 2011 09:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save junichi11/927067 to your computer and use it in GitHub Desktop.
Save junichi11/927067 to your computer and use it in GitHub Desktop.
CakePHP KiribanComponent (check round number)
<?php
/**
* KiribanComponent (Kiriban is round number)
*
* @author junichi11
*/
class KiribanComponent extends Object{
public $_controller = null;
/**
* @var array $option オプション
* snakeEyes ゾロ目 ex. 111, 22222,...
* mirror ミラー ex. 123321, 14541,...
*/
public $_option = array(
'snakeEyes' => true,
'mirror' => true,
'unit' => 100,
'countup' => true,
'countdown' => true,
);
//===============================================
// callback method
//===============================================
/**
* startup
* @param object $controller
* @return
*/
function startup(&$controller){
$this->_controller = $controller;
}
//===============================================
// original method
//===============================================
/**
* キリ番であるかどうか判定する
* @param number $number カウント
* @return mixed false|string(どのキリ番か)
*/
function isKiriban($number){
$res = false;
$res = $this->_request($number);
return $res;
}
/**
* 登録された判定をリクエスト
* @param number $number
* @return
*/
function _request($number){
if(isset($this->_controller->kiriban)){
$this->_option = am($this->_option, $this->_controller->kiriban);
}
$res = false;
foreach($this->_option as $key => $value){
$method = ucfirst($key);
$method = 'is'.$method;
if($value == true && $this->$method($number)){
return $key;
}
}
return $res;
}
/**
* ゾロ目の判定
* @param number $number
* @return boolean
*/
function isSnakeEyes($number){
$res = false;
if(preg_match('/^1{2,}$/', $number)
|| preg_match('/^2{2,}$/', $number)
|| preg_match('/^3{2,}$/', $number)
|| preg_match('/^4{2,}$/', $number)
|| preg_match('/^5{2,}$/', $number)
|| preg_match('/^6{2,}$/', $number)
|| preg_match('/^7{2,}$/', $number)
|| preg_match('/^8{2,}$/', $number)
|| preg_match('/^9{2,}$/', $number))
{
$res = true;
}
return $res;
}
/**
* ミラー判定
* 2桁以上の数値を判定する
* @param number $number
* @return boolean
*/
function isMirror($number){
$res = false;
$strlen = strlen($number);
if($strlen < 2 || preg_match("/[^0-9]/", $number)){
return $res;
}
$hlength = floor($strlen/2);
$prenumber = substr($number, 0, $hlength);
$reversePrenumber = strrev($prenumber);
$sufnumber = substr($number, strlen($number)-$hlength, $hlength);
if($reversePrenumber == $sufnumber){
$res = true;
}
return $res;
}
/**
* 単位判定
* @param number $number
* @return boolean
*/
function isUnit($number){
$res = false;
if(($number <= 0)
|| ($this->_option['unit'] == 0)
|| preg_match("/[^0-9]/", $number)
){
return $res;
}
$remainder = $number % $this->_option['unit'];
if($remainder == 0){
$res = true;
}
return $res;
}
/**
* 連番(カウントアップ)判定
* @param number $number
* @return
*/
function isCountup($number){
return $this->_isCountupdown($number, 'up');
}
/**
* 連番(カウントダウン)判定
* @param number $number
* @return
*/
function isCountdown($number){
return $this->_isCountupdown($number, 'down');
}
/**
* 連番判定
* @param number $number
* @param string $updown up|down
* @access private
* @return
*/
function _isCountupdown($number, $updown){
$res = false;
$strlen = strlen($number);
if($strlen < 2 || preg_match("/[^0-9]/", $number)){
return $res;
}
$numberTop = substr($number, 0, 1);
$compareNum = $numberTop;
if($compareNum != "-"){
for($i = 0; $i < $strlen - 1; $i++){
if($updown == 'up'){
$numberTop++;
if($numberTop > 9){
break;
}
}else if($updown == 'down'){
$numberTop--;
if($numberTop < 0){
break;
}
}else{
}
$compareNum .= $numberTop;
}
if($compareNum == $number){
$res = true;
}
}
return $res;
}
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment