PHP Mysql - 从两个整数生成编码的唯一整数并对其进行解码

时间:2015-11-26 10:02:36

标签: php mysql decode encode unique-id

我需要从userId,subjectId生成编码的唯一ID并对其进行解码。编码的数字不应该重复,长度必须是< = 12,它应该只是非负整数。 userId和subjectId来自数据库及其值,长度各不相同。

我使用了base_convert函数并将十进制数转换为八进制数。

/* 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,由于与内部" double"相关的属性,base_convert()可能会丢失大数字的精度。或者"浮动"使用的类型。

我们如何确保为userId和subjectId的任意组合生成唯一的数字?我们如何处理大数转换为浮点型?

我们不想在数据库中检查重复值。签入数据库需要很长时间。

感谢。

0 个答案:

没有答案