PHP Mysql — генерирует закодированное уникальное целое число из двух целых чисел и декодирует его

Мне нужно создать уникальный кодированный идентификатор из userId, subjectId и декодировать его. Кодированный номер не должен дублироваться, а длина должна быть <= 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, base_convert () может потерять точность при больших числах из-за свойств, связанных с используемым внутренним типом «double» или «float».

Как мы можем быть уверены, что это сгенерирует уникальные числа для любой комбинации userId и subjectId? Как мы можем справиться с большими числами, конвертирующими в тип с плавающей точкой?

Мы не хотим проверять в базе данных повторяющиеся значения. Проверка базы данных займет много времени.

Благодарю.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]