在PHP中生成随机值

时间:2012-07-21 17:47:04

标签: php arrays encryption

我是一个新手,当谈到PHP,我想尝试一些东西,但我完全不知道我该怎么做..说实话,我不知道是否可以非常清楚地解释这个...让我们开始..

我有几个字母,例如a,b,c,d和e ..

对于他们每个人我都有两个像这样的两个特征值:

a - > fg,dz,gc,bg

b - > zt,hg,oq,vg,gb

c - > lt,pr,cs,sh,pr

d - > kt,nt,as,pr

e - > zd,ke,cg,sq,mo,ld

问题出现了:

我想每次获得一个随机值,例如:dcbae 为此,最终输出应该是这样的:ntshztdzld或asltvggcmo .. (在使用上面的字符串(在a-e之间)生成随机字符串之后,我应该生成另一个字符串,其中包含与每个字符相关的随机值。 这不是家庭作业或类似的东西。

提前感谢您的理解..

3 个答案:

答案 0 :(得分:3)

嗯,你首先要创建一个地图:

$map = Array(
    "a" => Array("fg","dz","gc","bg"),
    "b" => Array("zt","hg","oq","vg","gb"),
    "c" => Array("lt","pr","cs","sh","pr"),
    "d" => Array("kt","nt","as","pr"),
    "e" => Array("zd","ke","cg","sq","mo","ld")
);

我注意到您有几次相同的“pr”对 - 如果您希望此编码可以反转,请避免重复。

无论如何,一旦你拥有它,就可以很容易地循环输入字符串并获得随机输出:

$input = "dcbae";
$len = strlen($input);
$output = "";
for( $i=0; $i<$len; $i++) {
    $entry = &$map[$input[$i]];
    if( isset($entry)) $output .= $entry[mt_rand(0,count($entry)-1)];
    else $output .= "??";
}
结果是

$output

答案 1 :(得分:1)

<?php

// Setup matching values
$encpairs[ 'a' ] = array( 'fg', 'dz', 'gc', 'bg' );
$encpairs[ 'b' ] = array( 'zt', 'hg', 'oq', 'vg', 'gb' );
$encpairs[ 'c' ] = array( 'lt', 'pr', 'cs', 'sh', 'pr' );
// etc. etc.

// Define input string
$my_string = 'abc';

// To randomly build input string
$my_string = '';
$last_key = '';
$key = '';
$keys = array_keys( $encpairs );
$ttl_keys = count( $keys ) -1;

// Generate the input string at random; change "5" to length you desire
for ( $j=0; $j < 5; $j++ ){
    // Randomly select a key from $encpairs array (giving you one letter at random)
    // The while loop ensures no two letters are used consecutively
    while ( $key == $last_key ) {
        $key =$keys[ rand(0, $ttl_keys ) ];
    }
    $last_key = $key;
    $my_string .= $key;
}

// Determine input string length
$length = strlen( $my_string );

// Loop through each letter
$output = '';
for( $i=0; $i < $length; $i++ ){
    shuffle( $encpairs[ $my_string[$i] ] );
    $output.= $encpairs[ $my_string[$i] ][0]; // Added [0]
} 

答案 2 :(得分:0)

首先在循环外初始化第二个字符串。将原始字符串(要加密)转换为数组,然后遍历整个数组并追加到第二个字符串。 所以你得到了

$splitstr=str_split($original);
$final_string="";
$map=Array(/**/);
foreach($splitstr as $char)
{
  $final_string.=$map[$char][rand(0,count($map[$char])-1)];
}
return $final_string;