我正在开发Xamarin.Forms项目,用户可以创建帐户,每个帐户在创建时都会获得一个唯一的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;
}
}
答案 0 :(得分:1)
是否有可能产生重复?我应该使用不同的方法吗?
总有可能获得相同的价值,因为没有什么可以防止同一天出生的两个人在一秒窗口内触发你的代码。所以虽然sha256
非常好,但你使用它的方式却不是这样,因为1秒仍然足以击中你。如果您想确保没有为不同的用户分配相同的ID,那么您应该始终检查(即通过查看您的数据库)是否尚未使用给定的ID。此外,您的数据库架构应使用UNIQUE
属性作为保留ID的列,以防万一:)
答案 1 :(得分:1)
很酷。
var Id = Guid.NewGuid().ToString();
答案 2 :(得分:0)
没有必要使用时间戳或生日,随机值会:
hash('sha256', random_bytes(32));
重复值的几率非常低,甚至不需要循环。如果您处理可能的错误,那就足够了。