1

userId、subjectId からエンコードされた一意の ID を生成し、デコードする必要があります。エンコードされた数値は重複してはならず、長さは <=12 である必要があり、負でない整数のみである必要があります。userId と subjectId はデータベースからのもので、その値は長さが異なります。

base_convert 関数を使用して、10 進数を 8 進数に変換しました。

/* Encode function - Converting from decimal to octal 
   $decNum = $usreId.'-'.$subjectId;
*/

function convertDecimalToOctal($decNum){
    $decToOctalNum ='';
    $hyphenPos ='';
    $decToOctal ='';

    $hyphenPos = !($tmp = strpos($decNum, '-')) ? 0 : $tmp; // Get Hyphen Position from string
    $decNum = str_replace('-', '', $decNum); //Replace '-' with '' and get number without '-'

    $decToOctal  = base_convert($decNum,10,8); // Convert from Decimal to Octal

    $decToOctalNum = ($hyphenPos . $decToOctal); // Append the hyphen position to converted octal number

    return $decToOctalNum;
}

/* Decode Function - Converting from octal to decimal */
function convertOctalToDecimal($octNum){
    $getHyphenPos ='';
    $octalToDec ='';
    $octalToDecNum ='';

    $getHyphenPos = substr($octNum, 0, 1); // get hyphen position(digit) from the octal number
    $octNum = substr($octNum, 1); // trim hyphen position off the octal number

    $octalToDec = base_convert($octNum,8,10); // Convert from Octal to Decimal
    $octalToDecNum = substr($octalToDec, 0, $getHyphenPos) . '-' . substr($octalToDec, $getHyphenPos); // Put the hyphen in the converted decimal number

    return $octalToDecNum;
}

php.net によると、 base_convert() は、使用される内部の「double」または「float」タイプに関連するプロパティが原因で、大きな数値で精度を失う可能性があります。

これにより、userId と subjectId の任意の組み合わせに対して一意の番号が生成されるようにするにはどうすればよいでしょうか? 浮動小数点型に変換する大きな数をどのように処理できますか?

重複する値についてデータベースをチェックインしたくありません。データベースのチェックインに時間がかかります。

ありがとう。

4

0 に答える 0