// 電話號碼驗證函數(shù)
function dr_shouji_xiaoyan($value, $data = [], $old = []) {
if (!$value) {
return dr_return_data(0, '請?zhí)顚戨娫?#39;);
} elseif (strlen($value) < 11) {
return dr_return_data(0, '請輸入正確的11位手機號碼');
} elseif (!is_numeric($value)) {
return dr_return_data(0, '只能輸入數(shù)字');
}
return dr_return_data(1, 'ok');
}怎么樣類似這樣寫一個身份證號位數(shù)效驗,身份證號一般是18位,然后最后一位數(shù)可能是X。怎么這樣效驗啊。
還有就是怎么在寫一個,郵箱的效驗。就是需要在填寫郵箱的地方判斷格式。
求大神幫我寫一個
/** * 身份證號驗證 * @param $id * @return bool */ public static function is_idcard( $id ) { $id = strtoupper($id); $regx = "/(^\d{15}$)|(^\d{17}([0-9]|X)$)/"; $arr_split = array(); if(!preg_match($regx, $id)) { return FALSE; } if(15==strlen($id)) //檢查15位 { $regx = "/^(\d{6})+(\d{2})+(\d{2})+(\d{2})+(\d{3})$/"; @preg_match($regx, $id, $arr_split); //檢查生日日期是否正確 $dtm_birth = "19".$arr_split[2] . '/' . $arr_split[3]. '/' .$arr_split[4]; if(!strtotime($dtm_birth)) { return FALSE; } else { return TRUE; } } else //檢查18位 { $regx = "/^(\d{6})+(\d{4})+(\d{2})+(\d{2})+(\d{3})([0-9]|X)$/"; @preg_match($regx, $id, $arr_split); $dtm_birth = $arr_split[2] . '/' . $arr_split[3]. '/' .$arr_split[4]; if(!strtotime($dtm_birth)) //檢查生日日期是否正確 { return FALSE; } else { //檢驗18位身份證的校驗碼是否正確。 //校驗位按照ISO 7064:1983.MOD 11-2的規(guī)定生成,X可以認(rèn)為是數(shù)字10。 $arr_int = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); $arr_ch = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); $sign = 0; for ( $i = 0; $i < 17; $i++ ) { $b = (int) $id{$i}; $w = $arr_int[$i]; $sign += $b * $w; } $n = $sign % 11; $val_num = $arr_ch[$n]; if ($val_num != substr($id,17, 1)) { return FALSE; } //phpfensi.com else { return TRUE; } } } } ————————————————你這個我怎么用呢,前面電話我是這樣用的。然后把代碼放到一個文件里面 這里調(diào)用用的,你這個我應(yīng)該怎么樣用
回復(fù)@SMALL
// 身份證驗證 function dr_sfz_xiaoyan($value, $data = [], $old = []) { if (!$value) { return dr_return_data(0, '請?zhí)顚懮矸葑C'); } elseif (strlen($value) < 11) { return dr_return_data(0, '請輸入正確的18位身份證'); } elseif (!is_numeric(substr($value, 0, 17))) { return dr_return_data(0, '只能輸入數(shù)字'); } elseif (!is_numeric(substr($value, 0, -1)) && strtolower(substr($value, 0, -1)) != 'x') { return dr_return_data(0, '身份證最后一位只能是x字母'); } return dr_return_data(1, 'ok'); }不是,身份證最后一位有可能是數(shù)字,有可能是X,不是只能是X啊
回復(fù)@如來
身份證最后一位有可能是數(shù)字,有可能是X,不是只能是X,就是這么寫的啊
回復(fù)@五金沖壓件
哦,我試試
回復(fù)@如來
// 身份證驗證 function dr_sfz_xiaoyan($value, $data = [], $old = []) { if (!$value) { return dr_return_data(0, '請?zhí)顚懮矸葑C'); } elseif (strlen($value) < 11) { return dr_return_data(0, '請輸入正確的18位身份證'); } elseif (!is_numeric(substr($value, 0, 17))) { return dr_return_data(0, '只能輸入數(shù)字'); } elseif (!is_numeric(substr($value, 0, -1)) && strtolower(substr($value, 0, -1)) != 'x') { return dr_return_data(0, '身份證最后一位只能是x字母'); } return dr_return_data(1, 'ok'); }回復(fù)@如來
} elseif (strlen($value) < 11) { return dr_return_data(0, '請輸入正確的18位身份證');這里的11 要修改成18嗎
// 身份證驗證 function dr_sfz_xiaoyan($value, $data = [], $old = []) { if (!$value) { return dr_return_data(0, '請?zhí)顚懮矸葑C'); } elseif (strlen($value) < 18) { return dr_return_data(0, '請輸入正確的18位身份證'); } elseif (!is_numeric(substr($value, 0, 17))) { return dr_return_data(0, '只能輸入數(shù)字'); } elseif (!is_numeric(substr($value, 0, -1)) && strtolower(substr($value, 0, -1)) != 'x') { return dr_return_data(0, '身份證最后一位只能是x字母'); } return dr_return_data(1, 'ok'); }完美答案,請給分
大哥,這個我剛才實驗了,
最后一個是S也保存成功了
回復(fù)@二開/定制/使用解答專家
// 郵箱驗證 function dr_email_xiaoyan($value, $data = [], $old = []) { if (!$value) { return dr_return_data(0, '請?zhí)顚慹mail'); } elseif (!preg_match('/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/', $value)) { return dr_return_data(0, 'email格式不對'); } elseif (strpos($value, '"') !== false || strpos($value, '\'') !== false) { return dr_return_data(0, 'email格式不對'); } return dr_return_data(1, 'ok'); }有點難搞,一人回復(fù)一個,我這懸賞(設(shè)置懸賞)應(yīng)該怎么采納呢
234樓都可行,兩個問題就發(fā)兩個帖子唄
開源是一種精神,但不是義務(wù),幫忙是情分,不幫也不要抱怨,建議大家多研究代碼、多閱讀代碼、多翻閱社區(qū)歷史問題!
/**
* 身份證號驗證
* @param $value
* @return bool
*/
function dr_is_idcard( $value, $data = [], $old = [] )
{
$value = strtoupper($value);
$regx = "/(^\d{15}$)|(^\d{17}([0-9]|X)$)/";
$arr_split = array();
if(!preg_match($regx, $value))
{
return dr_return_data(0, '請?zhí)顚懮矸葑C');
}
if(15==strlen($value)) //檢查15位
{
$regx = "/^(\d{6})+(\d{2})+(\d{2})+(\d{2})+(\d{3})$/";
@preg_match($regx, $value, $arr_split);
//檢查生日日期是否正確
$dtm_birth = "19".$arr_split[2] . '/' . $arr_split[3]. '/' .$arr_split[4];
if(!strtotime($dtm_birth))
{
return dr_return_data(0, '請?zhí)顚懻_的身份證');
} else {
return dr_return_data(1, 'ok');
}
}
else //檢查18位
{
$regx = "/^(\d{6})+(\d{4})+(\d{2})+(\d{2})+(\d{3})([0-9]|X)$/";
@preg_match($regx, $value, $arr_split);
$dtm_birth = $arr_split[2] . '/' . $arr_split[3]. '/' .$arr_split[4];
if(!strtotime($dtm_birth)) //檢查生日日期是否正確
{
return dr_return_data(0, '請?zhí)顚懻_的身份證');
}
else
{
//檢驗18位身份證的校驗碼是否正確。
//校驗位按照ISO 7064:1983.MOD 11-2的規(guī)定生成,X可以認(rèn)為是數(shù)字10。
$arr_int = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
$arr_ch = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
$sign = 0;
for ( $i = 0; $i < 17; $i++ )
{
$b = (int) $value{$i};
$w = $arr_int[$i];
$sign += $b * $w;
}
$n = $sign % 11;
$val_num = $arr_ch[$n];
if ($val_num != substr($value,17, 1))
{
return dr_return_data(0, '請?zhí)顚懻_的身份證');
} //phpfensi.com
else
{
return dr_return_data(1, 'ok');
}
}
}
}