根據使用者id生成一個唯一邀請碼

2022-11-24 21:26:07 字數 996 閱讀 5214

需求描述:根據使用者id生成與之對應的唯一邀請碼,範圍為‘0-9a-z’。

這個需求的重點在於加粗的部分,也就是要能夠根據邀請碼反推出使用者id,這樣邀請碼就不用入庫了,在使用者量很大的情況下,效能可以得到不小的提升。

隨機生成一個字串,再將使用者id拼接到字串後面,但是這樣id就太明顯了,容易暴露,而且如果id很長的話,會導致邀請碼很長,不利於使用者使用。

所以可以將使用者id插入到生成的字串中,隔一個字元插入一個id的數字,這樣id混合在字串中,不容易暴露,但是長度問題並沒有得到優化,於是把隔一個字元插入一個id的數字改為隔一個字元插入兩個id的數字。然而長度好像並沒有受到太大的影響。

思考:一個10進位制的數字短還是一個16進位制的數字短?

肯定是16進位制相對短一些,所以我們可以直接把使用者id轉成10+26=36進位制的不就可以了嗎?具體**如下:

function createcode($user_id)

return $code;

}

邀請碼保證了唯一性,並且長度不會太長,使用者id也能夠根據邀請碼反推出來,但是有一點不好的是,別人也可以根據邀請碼去反推出user_id,因此,我們需要做一些優化。

把0剔除,當做補位符號,比如小於四位的邀請碼在高位補0,這樣36進位制就變成了35進位制,然後把字串順序打亂,這樣,在不知道$source_string的情況下,是沒辦法解出正確的user_id的。

**如下:

function createcode($user_id) 

if(empty($code[3]))

$code = str_pad($code,4,'0',str_pad_left);

return $code;

}

這樣,對應user_id的唯一邀請碼就生成了,再附一個解碼函式:

function decode($code) 

return $num;

}

python使用uuid庫生成唯一ID

資料 python官方doc 20.15.uuid uuid objects according to rfc 4122 uuid的演算法介紹 a universally unique identifier uuid urn namespace 概述 uuid是128位的全域性唯一識別符號,通常由3...

使用SnowFlake演算法生成唯一ID

考慮過的方法有 以上兩種方法都可以查到就不多做解釋了 最終選擇了twitter的snowflake演算法 這個演算法的好處很簡單可以在每秒產生約400w個不同的16位數字id 10進位制 原理很簡單 id由64bit組成 其中 第一個bit空缺 41bit用於存放毫秒級時間戳 10bit用於存放機器...

在分散式場景,生成唯一ID

在分散式環境下生成資料庫主鍵是一件比較麻煩的事情,這裡簡單總結下,以供以後使用。每個伺服器使用自增主鍵,不同伺服器的步長不一樣,比如 a 伺服器生成1,3,5,7.b 伺服器生成2,4,6,8.缺點 難以擴充套件。合併資料庫時非常麻煩。分庫分表時難以處理。常見的方式。可以利用資料庫也可以利用程式生成...