<?php
//身份证号转换
function IDCode15to18($ID15)
{
$ID18=substr($ID15,0,6).'19'.substr($ID15,6);
for($i=17;$i>0;$i--){
$num+=(2^$i%11)*(substr($ID18,18-$i,1));
}
$num=$num%11;
switch($num){
case 0:
$code="1";
break;
case 1:
$code="0";
break;
case 2:
$code="X";
break;
default:
$code=strval(12-$num);
break;
}
$ID18.=$code;
return $ID18;
}
if($_POST["old"]!="")
echo IDCode15to18($_POST["old"]);
?>
<form method=post>
<input name=old value="<?PHP echo $_POST["old"];?>">
<input type=submit value="转换">
</form>

解决方案 »

  1.   

    <?php
    $str="12345678912345612*";
    if(ereg("^[0-9]{15}$",$str) or  ereg("^[0-9]{17}\\*$",$str) or ereg("^[0-9]{18}$",$str) ) 
    {
    print "这是一个正确的号码";

    else {
    print "这不是一个正确的号码.";
    }
    ?>
    这是笨人的笨方法.见笑.
      

  2.   

    $id1 = "330000000000000";
    $id2 = "33sdfdsdsafds00";
    $id3 = "330000000000000000";
    $id4 = "33000000000000000*";
    if(preg_match("/(^\d{15}$)|(^\d{17}[\*|\d]{1}$)/i",$id1))
      echo "id1=".$id1."ok!";
    if(preg_match("/(^\d{15}$)|(^\d{17}[\*|\d]{1}$)/i",$id2))
      echo "id2=".$id2."ok!";
    if(preg_match("/(^\d{15}$)|(^\d{17}[\*|\d]{1}$)/i",$id3))
      echo "id3=".$id3."ok!";
    if(preg_match("/(^\d{15}$)|(^\d{17}[\*|\d]{1}$)/i",$id4))
      echo "id4=".$id4."ok!";
      

  3.   

    ereg跟preg_match有什么区别好象在ereg中无法使用与或是吧.
      

  4.   

    有没有关于preg_match这个函数的中文详细说明
      

  5.   

    摘录:正则表达式语法
    http://expert.csdn.net/Expert/topic/949/949264.xml?temp=.179989
      

  6.   

    连起来就是与if(preg_match("/^\d{15}(\d{2}[\d\*])?$/",$indentID)){
      echo 'yes';
    }既然不要求字母就不存在大小写的问题
    \d{15}代表前面15位
    (\d{2}[\d\*])?中的括号中的代表2位数字+一位数字或者*,最后在外面加上?,表示非贪婪模式了,这里相当于{0,1}