PHP代码:MAC地址数字互转
/**
* mac合法性校验 兼容大小写和(:-)
* @param $mac
* @return bool
*/
protected function mac_check($mac)
{
if (empty($mac)) {
return FALSE;
}
$mac_reg = '/^([0-9a-fA-F]{2})((([:][0-9a-fA-F]{2}){5})|(([-][0-9a-fA-F]{2}){5}))$/i';
return preg_match($mac_reg, $mac) == 1 ? TRUE : FALSE;
}
/**
* mac 转化为数字表示
* @param $mac_str
* @return bool|number
*/
protected function mac_to_int($mac_str)
{
if (!$this->mac_check($mac_str)) return FALSE;
$filter_mac = strtolower(preg_replace('/[:-]/', '', $mac_str));
$mac_int = hexdec($filter_mac);
if (is_numeric($mac_int))
return $mac_int;
else
return FALSE;
}
/**
* 数字转换为标准mac
* @param $mac_int
* @param string $chain ('-', ':')
* @return bool|string
*/
protected function int_to_mac($mac_int, $chain = '-')
{
$max_value = 281474976710655;
$min_value = 0;
if (!is_numeric($mac_int) || $mac_int > $max_value || $mac_int < $min_value) return FALSE;
$chain_list = array('-', ':');
if (!in_array($chain, $chain_list)) return FALSE;
$mac_hex = dechex($mac_int);
$mac_str = strval($mac_hex);
$mac_hex_len = strlen($mac_hex);
if ($mac_hex_len < 12) {
$add_len = 12 - $mac_hex_len;
$add_str = '';
while ($add_len--) {
$add_str .= '0';
}
$mac_str = $add_str . $mac_str;
}
$mac_arr = str_split($mac_str, 2);
$mac_full_str = implode($chain, $mac_arr);
if (!$this->mac_check($mac_full_str)) {
return FALSE;
} else {
$res = str_replace("-", ":", strtoupper($mac_full_str));
return $res;
}
}
THE END




