在我們的開發過程中,經常會遇到ID生成的問題,那么這里就介紹一種解決方案,注意這里只適合混淆ID規則,也就是說生成的ID沒有任何規則,不適用于訂單ID。
一般有序自增主鍵的ID,極易被爬蟲抓取數據,作為應用開發者,這是不應該的,你辛辛苦苦收集的數據轉眼之間被其他人給抓取了,是不是很大的損失?
話說著名的Youtube網站就是這么做的。
今天我們介紹的一個支持市面上所有語言的數字編碼庫hashids。
hashids

Hashids是一個非常小巧的跨語言的開源庫,它用來把數字編碼成一個隨機字符串。它不同于md5這種算法這種單向映射,Hashids除了編碼還會解碼。
如果轉換方式一樣,那么同一字符串得到的結果是相同的。
Hashids hashids= new Hashids("this is my salt");//加密數字1String hashStr = hashids.encode(1);System.out.println("1加密后值為:"+hashStr);//解密數字1long[] hashNums = hashids.decode(hashStr);for (int i = 0; i < hashNums.length; i++) {??? System.out.println("解密后值為:" + hashNums[i]);}
hashids自定義設置最小哈希長度
支持設置加密后的字符串長度
Hashids hashids = new Hashids("this is my salt",6); //加密數字1String hashStr = hashids.encode(1);System.out.println("自定義哈希長度加密1后值為:"+hashStr); //解密數字1 long[] hashNums = hashids.decode(hashStr);for (int i = 0; i < hashNums.length; i++) {??? System.out.println("自定義哈希長度解密1后值為:" + hashNums[i]); }
hashids自定義設置哈希字母表
支持設置哈希字母表,不過最少長度應該是16位,這里沒有具體的測試。
Hashids hashids = new Hashids("this is my salt", 0, "0123456789ABCDEF"); String hashStr = hashids.encode(1); System.out.println("自定義哈希字母表加密1后值為:" + hashStr);long[] hashNums= hashids.decode(hashStr);for (int i = 0; i < hashNums.length; i++) {??? System.out.println("自定義哈希字母表解密1后值為:" + hashNums[i]); }
使用
安裝,npm包地址:https://www.npmjs.com/package/hashids
npm install hashids
在PHP中的使用方法:
$hashids = new HashidsHashids('this is my salt');$id = $hashids->encode(1, 2, 3);$numbers = $hashids->decode($id);
在NodeJs中使用
const Hashids = require('hashids/cjs');const hashids = new Hashids('', 11);hashids.encode(20);
在JS中使用
在使用過程中,該方法不可用來作為加密使用。
項目地址請點擊擴展鏈接