遍歷字串每個字符,累加 ASCII/Unicode 碼值,返回整數作為雜湊值。屬於**極簡非加密雜湊**,僅供教學/非安全場景(如簡單去重、索引分桶)。
function simpleHash(string $str): int {
$hash = 0;
$len = strlen($str);
for ($i = 0; $i < $len; $i++) {
$hash += ord($str[$i]);
}
return $hash;
}
// 使用
echo simpleHash('www.jb51.net'); // 1082
| 維度 | 表現 |
|---|---|
| 碰撞率 | 極高(異序字串同值,如 "ab" 與 "ba") |
| 單向性 | 不可逆,但非加密安全 |
| 分佈均勻性 | 差,集中在小數值區間 |
| 長度敏感 | 長字串數值溢出風險(PHP 整數無上限但性能下降) |
| 適用場景 | 教學演示、極簡索引、非安全校驗 |
// DJB2 經典字串雜湊
function djb2Hash(string $str): int {
$hash = 5381;
for ($i = 0, $len = strlen($str); $i < $len; $i++) {
$hash = (($hash << 5) + $hash) + ord($str[$i]); // hash * 33 + c
}
return $hash & 0xFFFFFFFF; // 32位無符號
}
// FNV-1a
function fnv1aHash(string $str): int {
$hash = 0x811c9dc5;
for ($i = 0, $len = strlen($str); $i < $len; $i++) {
$hash ^= ord($str[$i]);
$hash = ($hash * 0x01000193) & 0xFFFFFFFF;
}
return $hash;
}
| 用途 | 推薦算法 | PHP 實現 |
|---|---|---|
| 密碼存儲 | Argon2id / bcrypt | password_hash() / password_verify() |
| 數據完整性校驗 | SHA-256 / SHA-3 | hash('sha256', $data) |
| 高效能非加密索引 | xxHash / MurmurHash3 | hash('xxh32', $data) (PHP 7.1+) |
| 分佈式系統一致性雜湊 | Ketama / Jump Consistent Hash | 擴展或純 PHP 實現 |
| HMAC 簽名 | SHA-256 HMAC | hash_hmac('sha256', $data, $key) |
password_hash()(PHP 5.5+ 內建 bcrypt/Argon2)理解簡易雜湊原理有助於掌握雜湊表、布隆過濾器、一致性雜湊等數據結構核心,但生產環境**堅決使用標準庫**。