我正在使用Xamarin。窗体项目和用户可以创建帐户,每个帐户在创建时都会得到一个唯一的ID。我应该使用特定的方法来创建ID吗?
我在用
$id = hash(sha256, $now. $birthday);
是否有可能会生成重复项?我是否应该使用其他方法?或者这样可以吗?
编辑:
$id = hash(sha256, $date . $birthday);
if(DB::query('SELECT * FROM users WHERE id=:id', array(':id' => $id))){
$id = hash(sha256, $date . $birthday . rand(100, 999));
if(DB::query('SELECT * FROM users WHERE id=:id', array(':id' => $id))){
echo 'try_again';
return;
}
}
3条答案
按热度按时间toiithl61#
是否有可能会生成重复项?我是否应该使用不同的方法?
你总是有机会得到相同的值,因为没有什么能阻止两个同一天出生的人在一秒钟内触发你的代码。所以虽然
sha256
很好,但你使用它的方式却不是,因为1秒钟仍然足够长。如果你想确保你没有给不同的用户分配相同的ID,那么你应该经常检查(即通过查看你的数据库)给定的ID是否还没有被使用。你的数据库模式也应该使用UNIQUE
属性来防止重复的ID被插入。mo49yndu2#
冷静点。
a9wyjsp73#
不需要使用时间戳或生日,使用随机值即可:
出现重复值的几率非常低,甚至不需要循环,只要能处理可能出现的错误就足够了。