星期五, 7月 27, 2012

密碼產生器

今天業主跟我說,他希望 user 密碼不要自己設,因為 user 設密碼都用超級簡單的,例如:身分字號、電話號碼、生日等等..這樣哪天被惡搞,就很倒楣,所以我就跟客戶建議說,那寫支密碼產生器好了,讓我們來幫客戶設,我們把規則設定好,這樣有每個用戶就都會有很難記的密碼啦!XD..

不過難記歸難記,總不能連打都不知怎麼打吧!所以討論規則如下:

1.要有小寫英文
2.要有大寫英文
3.要有數字
4.密碼長度可以業主自己設定

上面這些條件,應該是地球人可口述也可以勉強記起來的規則..所以,噹噹噹..開工!

public class PasswordCreator
{
    Random r = new Random();
    string[] strArr = {
        "abcdefghijklmnopqrstuvwxyz",
        "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
        "0123456789"
    };
    
    public string GetPassword(int passwordLength)
    {
        //strArr.Sum(a=>a.ToCharArray().Count()).Dump();
                        
        if(strArr.Sum(a=>a.ToCharArray().Count())< passwordLength)
            throw new Exception("密碼長度太長");
            
        if(passwordLength<strArr.Count())
            throw new Exception("密碼長度太短");
        
        if(strArr.Count()==0)
            throw new Exception("密碼條件規則不許為空");
    
        int partLength = (passwordLength / strArr.Count()) 
                          + ((passwordLength % strArr.Count()) == 0 ? 0 : 1);
        
        var finialArr = new List<char>();
        foreach(var item in strArr)
            finialArr.AddRange(GetCharArr(item, partLength));            
        var randomChars = GetCharArr(string.Join("", finialArr),finialArr.Count())
                                .Take(passwordLength).ToArray();
        return    string.Join("",randomChars);    
    }
    
    private IEnumerable<char> GetCharArr(string str, int number)
    {        
        return str.ToCharArray()
                    .OrderBy(a => r.Next())
                    .Take(number);
    }
}

用法

void Main()
{
    var pc = new PasswordCreator();
    Console.WriteLine(pc.GetPassword(8));
    Console.WriteLine(pc.GetPassword(6));
    Console.WriteLine(pc.GetPassword(4));
    Console.WriteLine(pc.GetPassword(3));
    Console.WriteLine(pc.GetPassword(15));
}

結果

bSIg7aQ3
wo9JS4
5wEr
9qQ
gWH0fO3IpPr912a

上面這段程式,花一點點時間寫的,沒有很嚴謹的測試,有 bug 記得要自己改啊,還有如果需要有更"困難"的字元,請自己加入就行啦,程式也不用啥改,各位大大如果有需要就拿去參考吧!記得看懂再用XD

PS:幫客戶設密碼,是有副作用的,就是...user 不會記密碼,會一直問你,然後你(業主)就要幫 user 重新設定密碼,這一點記得要跟業主打預防針啊!!!!!!

參考:
http://stackoverflow.com/questions/1287567/c-is-using-random-and-orderby-a-good-shuffle-algorithm

星期一, 7月 16, 2012

ASP.NET MVC - 新增、查詢、修改、刪除基本功實戰

這裡先謝謝大家那天的光臨參與,讓這次的研討會順利成功,不過有些不足的地方需要大家多多擔待,例如場地因素以及經驗上時間掌握的不足,讓課程講的有點急促,這些我都會加以檢討的。

本次的內容主要是講解 ASP.NET MVC 如何去對資料庫的新增、查詢、修改、刪除等這些基本的動作,這些動作都屬於很基本的東西,大家應該把這些動作練習到很熟悉,學會了這些內容,ASP.NET MVC 就已經會了 6 成以上了,之後再經過一些專案的磨練,應該不久就會有小成了,這裡也把當天的 PPT 及範例分享出來,讓大家可以下載學習!

研討會內容:
http://mvc.tw/Event/2012/7/14

投影片:
https://speakerdeck.com/u/twmvc/p/aspnet-mvc-2

範例檔案:
http://dl.dropbox.com/u/76162656/d/%32%30%31%32%30%37%31%34%5f%42%69%62%62%79%5f%4d%56%43%5f%43%52%55%44%53.zip