1. 程式人生 > >.net根據使用者Id生成唯一6位邀請碼,可逆轉。

.net根據使用者Id生成唯一6位邀請碼,可逆轉。

今天要做邀請碼這個功能,但是我又懶得修改資料庫表結構,然後在網上看了不少部落格,然後在php一個部落格上面看到了一種寫法,然後便根據我的理解改寫成了.net的寫法。話不多說直接貼程式碼。
 static void Main(string[] args)
        {
            int num = 10086;
            Console.WriteLine(createCode(num));
            Console.WriteLine(decode(createCode(num)));
            Console.ReadKey();
        }
        public static string createCode(int Id)
        {
            string code = "";
            string source_string= "2YU9IP6ASDFG8QWERTHJ7KLZX4CV5B3ONM1";//自定義35進位制
            int mod =0;
            StringBuilder sb = new StringBuilder();
            while (Id > 0)
            {
                mod = Id % 35;
                Id = (Id - mod) / 35;
                code = source_string.ToCharArray()[mod]+ code;

            }
            return code.PadRight(6,'0');//不足六位補0
        }
        public static int decode(string code)
        {
            code =new string((from s in code where s!='0' select s).ToArray());
            int num = 0;
            string source_string = "2YU9IP6ASDFG8QWERTHJ7KLZX4CV5B3ONM1";
            for (int i = 0; i < code.ToCharArray().Length; i++)
            {
                for (int j = 0; j < source_string.ToCharArray().Length; j++)
                {
                    if (code.ToCharArray()[i]== source_string.ToCharArray()[j])
                    {
                        num += j*Convert.ToInt32(Math.Pow(35, code.ToCharArray().Length-i-1));
                    }
                }
            }
            return num;
        }

這樣寫的好處在於他人不知道你進位制的順序所以也很難從邀請碼反推出你的使用者ID。

我只是一個走在程式設計路上的菜鳥,歡迎大家批評指正謝謝。