ช่วยด้วยครับ PHP Ramdom ตัวอักษรและตัวเลขโดยไม่เกิน 8 ตัวอักษร แต่ความยากมันอยู่ตรงนี้.....................

ขอความกรุณาด้วยครับนั่งคิดมาหลายวันแล้วแต่ก็ทำไม่ได้สักที  คือเค้าสั่งเงื่อนไขมาแบบนี้ครับ
1.Random ตัวอักษรและตัวเลขให้สลับที่กันโดยไม่เกิน 8 ตัวอักษร
2.ถ้ารับค่าตัวเลขเข้าไป 2 ตัวก็จะไปแทนที่ตัวอักษร 2 ตัวคือให้มันอยู่ใน 8 ตัว เช่น
                                N68XOGIW          // ถูก
                                N6XOGIW8          // ถูก
                                N68XOGIWA    // แบบนี้เกิน ไม่ได้ๆ
                                MNXOGIWA68    แบบนี้เกิน ไม่ได้ๆ
                                หรือรับ 3 ตัวมันก็จะเข้าไปแทน     3  ตัว
3.ตัวเลขห้ามสลับฝั่งกันเวลารัน คือตั้งว่า 86 ต้องไม่กลับฝั่งกันแต่แยกตำแหน่งกันได้ เช่น
                               LV6UH8EW            //สลับ
                               RRG6DP8J            //สลับ
                               OYEFUF6Q            //สลับ
                               86OUMPIW            //ไม่สลับ
                               O8UMPI6W            //ไม่สลับ
4.ในตัวอักษรต้องไม่มีตัว O เวลา Ramdom ก็คือไม่เอาตัว O
5.ต้องใช้ Function ส่งค่าตัวเลขไปเท่านั้น และใช้ตัวแปรเดียว(1 parameter) ก็คือเช่น
             function $pass($input)
             {

              }
         แล้วแทนแบบนี้
              &pass(3)        // เอา 3 ไปแทนในตัวอักษร 1 ตัว
             $pass(43)      // เอา 43 ไปแทนในตัวอักษร 2 ตัว
              $pass(543)    // เอา 543 ไปแทนในตัวอักษร 3 ตัว
6.ถ้ารับเกิน 8 ตัวอักษรจะ error แต่ถ้าไม่ใส่ก็ error เช่นกัน ต้องใส่ในช่วง 1-8 ตัวอักษรเท่านั้น

นี่เป็นโค้ดที่ผมทำ แต่ที่ผมทำรับ 2 parameter แต่โจทย์ต้องการ 1 parameter ครับ ก็เลยต้องทำใหม่

output
จะเห็นว่าสลับกันบ้าง ไม่ขึ้นบ้าง ขึ้นมั่วบ้างครับ






ขอร้องผู้รู้ช่วยผมทีครับ
คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 3
อ้างอิง
https://ppantip.com/topic/37261106/


<?
    function random_char($input)
    {
        $r="";

        $input_len=strlen($input);
        for($i=1;$i<=$input_len;$i++)
        {
            $num[$i]=substr($input,($i-1),1);
        }

        for($i=1; $i<=10;$i++){ $ch[$i]=""; }
        
        $fpos=1;
        $lpos=8-($input_len-1);
        //echo $fpos." : ".$lpos."<br>";
        for($i=1;$i<=$input_len;$i++)
        {
            $num_pos[$i]=rand($fpos,$lpos);
            //echo "rand pos =".$num_pos[$i]."<br>";
            $fpos=$num_pos[$i]+1;
            $lpos=8-($input_len-$i);
            $ch[$num_pos[$i]]=$num[$i];
            //echo $fpos." : ".$lpos."<br>";
        }

        for($i=1;$i<=10;$i++)
        {
            if($ch[$i]=="")
            {
                $c=rand(1,2);
                if($c==1){ $ch[$i]=chr(rand(65,78)); } // A-N
                else{ $ch[$i]=chr(rand(80,90)); } // P-Z
            }
            $r=$r.$ch[$i];
        }
        return $r;
    }
?>
<?
    $num=543;
    for($i=1;$i<=20;$i++)
    {
        echo random_char($num)."<br>";
    }
?>

VCD5J43KHW
5LUKU43TGY
PCHJ543HRT
NTS5Q43ZUZ
ZCGFF543YZ
5J4RXZ3VUF
IMY543YJRV
MZ5MP43DVZ
5IRNK43SXD
CVUG543ZHF
AIF543CZTR
BQNS543ZDT
FSB5W43TMP
5XVN4L3CZD
IH54J3YQAX
Y54L3JKPSI
5M43SLCWFT
DXHMH543BY
5TREZ43QRZ
5Q4E3ZAAIV
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่