Мне нужно предоставить пользователям уникальную ссылку, содержащую их USER ID
(в этом случае не рекомендуется использовать UUID и т. Д.)
Это не так важно, но я все же хочу убедиться, что очень трудно извлечь идентификатор пользователя или угадать следующий и т. Д.! (даже если это достигается безопасностью по неизвестности ...)
Я придумал это решение:
// @var $id int|string
function obfuscate_number($id, bool $reverse=FALSE)
{
$changing = (int)substr($id, -1);
$multiplier = '45' . $changing;
$base = 25;
// Obfuscate Number
if($reverse === FALSE)
{
$new = bcmul("$id", "$multiplier", 0);
$convert = bcadd("$new", "$changing", 0);
$obf = base_convert($convert, 10, $base) . $changing;
return $obf;
}
// Reverse to Number
else
{
$deobf = base_convert(substr($id, 0, -1), $base, 10);
$convert = bcsub("$deobf", "$changing", 0);
// Simple Validation
if($convert % $multiplier !== 0) return FALSE;
$number = (int)bcdiv("$convert", "$multiplier", 0);
return $number;
}
}
// For example number 123456 => 5dnpfi6
// After reversing 5dnpfi6 => 123456
// For example number 563 => g81h3
// After reversing g81h3 => 563
Если это возможно, пожалуйста, помогите мне улучшить его.
Также я думаю, что вероятность столкновения здесь равна 0, я прав?