天天看點

不想在位址欄中曝光你資料庫自增ID的方法

<p><span style="font-size: 18px;"></span></p>      

當你想隐藏資料庫id時,你可以使用 Hashids 這個開源庫,類似的開源項目比較多,這裡隻針對 Hashids 做個使用說明

.net  版本的資料位址如下:

官網:http://hashids.org/net/

代碼:https://github.com/ullmark/hashids.net

以下是使用方法:

using System;
using HashidsNet;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace HashidsNetTester
{
    [TestClass]
    public class HashidsTest
    {
        /// <summary>
        /// 鹽
        /// </summary>
        private string salt = "this is my salt string";
        [TestMethod]
        public void TestEncode()
        {
            //使用指定掩碼,擷取最小長度的hash值
            Hashids hs = new Hashids(salt,5);
            var n1 = 1;
            var s1 = hs.Encode(n1);//編碼:一個數值進行
            var dn1 = hs.Decode(s1)[0];//解碼:一個數值
            Assert.IsTrue(dn1 == n1);
        }
        [TestMethod]
        public void TestEncodeArr()
        {
            Hashids hs = new Hashids(salt, 5);
            var n1 = new int[]{11,22,33,44};
            var s1 = hs.Encode(n1);//編碼多個數值組,用于資料庫中聯合主鍵
            var dn1 = hs.Decode(s1);//解碼:獲得編碼前的聯合主鍵數組
            for (int i = 0; i < n1.Length; i++)
            {
                Assert.IsTrue(dn1[i] == n1[i]);
            }
        }
        [TestMethod]
        public void TestEncodeHex()
        {
            Hashids hs = new Hashids(salt, 5);
            var n1 = "1abc";
            var s1 = hs.EncodeHex(n1);//編碼:16進制數
            var dn1 = hs.DecodeHex(s1);//解碼:獲得16進制數
            Assert.IsTrue(n1.Equals(dn1, StringComparison.CurrentCultureIgnoreCase));
        }
    }
}