跳至主要內容

Visual Basic .Net 程式案例學習: 11. 產品序號產生器 (2014版)

Visual Basic .Net 程式案例學習: 11. 產品序號產生器 (2014版)

Visual Basic .Net 程式案例學習: 11. 產品序號產生器 (2014版)

11.1 問題

產品序號最主要的條件就是不能重複,因為序號重複廠商就不知道哪一套才是正版的,辨識的方法就得改採其他模式。除此之外,序號若是藉由一套規則而產生的話,還可以自行加入關鍵碼、驗證碼,加強序號的安全性。不過大量不重複的序號,要怎麼產生呢?這是我們探討的問題,至於序號的安全性、辨識方法則不是我們討論的主題。

序號至少是目前最普遍的一種原版保護方式,透過網路還可以產生對應的效果來查核是否為盜版。簡單的做法就是紀錄產品的序號於伺服器,當客戶端有新安裝的產品,就必須連上網路與伺服器上的序號做匹配或是比對,驗證通過後才可以使用該產品。可是問題來了,若有兩三台電腦註冊的序號都是相同時,遠在各地,廠商不可能禁止任何一台電腦使用,因為廠商不知道哪一台才是真的有原版,而且也無從連絡,除非購買軟體還必須登記姓名及電話,但那也太麻煩了。

因此動態的序號會比較有效,也就是當有新安裝的產品上線註冊時,系統確認是正確的序號後,立即發給一組新的序號,爾後就此用新的序號來註冊,也就是說每註冊一次就會獲得一個新的序號,而舊序號就不能再繼續使用了。這種方式在網路普遍的時代中,算是一個比較中庸且有效的做法。因為還是無法防止盜版的問題,但卻又能禁止到大多數普通的盜版行為。在還沒有百分之百防盜版的技術出現之前,廠商們只能選擇既不麻煩使用者,又多少能夠防堵盜版的方法。

11.2 需求

表格 11‑1 「產品序號產生器」系統目的分析表

版本:1.0    要做什麼   不要做什麼(不要做不代表不會做)  
能做什麼 (第一格:必要項目) (第二格:次要項目)
要能夠自動產生序號。 可自訂批次產生序號。
可自訂序號的長度。
序號產生要避免重複。
不能做什麼(不能做代表不需要做) (第三格:不必要項目) (第四格:不需要項目)
序號中可以加入驗證碼。 序號可建立網路驗證機制。
序號中可加入隱藏資訊。

表格 11‑2 「產品序號產生器」系統目標分析表

版本:   重要   不重要  
優先 (重) (急)
要能夠自動產生序號。 可自訂序號的長度。
序號產生要避免重複。
不急迫 (輕) (緩)
無。 無。

表格 11‑3 「產品序號產生器」系統規格表

規格項目   規格內容   備註
主要功能 要能夠自動產生序號。 …
序號產生要避免重複。
使用介面 可自訂序號的長度。 …

11.3 特色

特點就是提供兩種函式,讓您自行產生序號。提供亂數產生及GUID產生函式。


11.4 使用工具

語言       軟體  
Visual Basic 2005  MS Visual Studio 2005 .NET

11.5 系統架構

主要以兩個序號產生的函式,透過亂數以及GUID的方式產生序號,本程式按一次鈕只會產生一組序號,其實透過函式不斷的呼叫,可以產生一定數量的序號,您可以自訂一個迴圈範圍,自行產生足夠的序號。而序號長度也是透過字元刪減或是字元計數來控制的,這都寫在函式中,您可以在程式實作的部分中了解。

11.6 程式實作


    ‘使用數字及英文字母加上亂數產生序號的函式

    Public Function RandomSN(ByVal Length As Integer) As String

        ‘宣告並設定空的初始值

        Dim RndString As String = String.Empty

        ‘宣告整數變數

        Dim Zero, Nine, A, Z, Count, RandNum As Integer

        ‘宣告亂數物件

        Dim oRandom As New Random(System.DateTime.Now.Millisecond)

        ‘設定ASCII Code的數值範圍,數字部分由0~9,英文部分由大寫A~Z

        Zero = Asc("0")

        Nine = Asc("9")

        A = Asc("A")

        Z = Asc("Z")

        ‘使用迴圈判斷是否字串長度已足夠,不足夠則繼續產生

        While (Count < Length)

            ‘使用Next方法產生該設定範圍的亂數

            RandNum = oRandom.Next(Zero, Z)

            ‘當所產生的數值符合範圍內

            If (((RandNum >= Zero) And (RandNum <= Nine) Or _

                 (RandNum >= A) And (RandNum <= Z))) Then

                ‘字串累加新產生的字元,而字元是透過Chr函式轉碼而成的

                RndString = RndString + Chr(RandNum)

                ‘字元長度計數器累加一

                Count = Count + 1

            End If

        End While

        ‘傳回新產生的序號

        Return RndString

    End Function

    ‘使用GUID替代序號的產生函式

    Public Function GUIDRandomSN(ByVal length As Integer) As String

        ‘利用GUID產生新的編碼

        Dim guidResult As String = System.Guid.NewGuid().ToString()

        ‘用取代的方式將減號去除掉

        guidResult = guidResult.Replace("-", String.Empty)

        ‘檢查使用者要求的字元長度是否有問題

        If length <= 0 OrElse length > 32 Then

            MessageBox.Show("序號長度必須在到32之間")

        End If

        ‘依照設定好的字元長度,傳回序號

        Return guidResult.Substring(0, length)

    End Function

image.png
圖 11‑1

11.7 修改重點

如同一開始所提出的方法,修改成網路版的動態序號,會比較符合經濟效益。因為方便修改,移植這序號產生的函式到ASP.NET是相當容易的一件是,就技術上並無大礙,時間上也比較有效率。

除此之外,將序號編碼產生有意義的字元,也是一種資訊隱藏的方式。有些序號會獲得硬碟的ID,或是作業系統的種類,其實這些技巧已經非常普遍了,但序號最終目的還是為了防止盜版,讓原版使用者獲得好的服務。因此,序號若有其他用途,可能也只是將資訊隱藏,藉由解碼而獲得資訊。

增加合理性判斷也是一種好方法,透過有條理的流程,能夠多少防堵一些不合法的序號註冊,例如:取得註冊電腦IP位址,加以編碼為英文字母,而後當註冊者的IP位址與序號不同時,就可以判讀出序號流出。

為了怕產生的序號可能有重複,可先將序號排序,而後兩兩比對,若有重複則上下筆資料必會相同,這時就可以替除其中一筆。不過基本上要產生相同的序號機會實在很小,特別是使用GUID的方式產生序號,幾乎是遇不上重複時後。

11.8 結論

動態序號的方式目前有許多軟體是採用這種模式,因為方便控制安裝數量,透過網路也能夠確實掌握使用狀況,例如:譯典通系列(國內著名的中英日翻譯軟體)。它可以透過網頁獲得新的註冊序號,再進行註冊。而且透過更新字典,也方便統計下載新字典的次數,同等於啟用譯典通軟體的次數。這是一個影響層度跟友善度的一個平衡點,其實只要做到對使用者影響最小的保護原版方式,通常是最能夠被大眾所接受的。所以最終還是回歸到市場決定機制,由市場來決定哪一種保護模式最被大眾所接受,而非以技術模式來決定。

image.png
Lai Tai-Yu (賴岱佑)

Popular Posts

波蘭文學習之旅:1-1. 波蘭文字母與發音(注音版)

最佳化處理策略之快速消除扭曲演算法

Visual Basic 6.0 程式案例學習: 10. 條碼列印程式 (2014版)

波蘭文學習之旅:1-1. 波蘭文字母與發音(注音版)

圖片

最佳化處理策略之快速消除扭曲演算法

圖片

Visual Basic 6.0 程式案例學習: 10. 條碼列印程式 (2014版)

圖片

Python 日期與時間的處理

圖片

用10種程式語言做影像二值化(Image binarization)

圖片

Visual Basic .Net 程式案例學習: 06. 題庫測驗系統 (2014版)

圖片

修復損毀的 SQLite DB 資料庫

圖片

解決 ValueError: If using all scalar values, you must pass an index

圖片

Visual Basic 6.0 程式案例學習: 04. 人事考勤管理系統 (2014版)

圖片

Visual Basic 6.0 程式案例學習: 07. 收據列印程式 (2014版)

圖片

佑佑的 Line 貼圖創作

貼圖作者網址:

https://line.me/S/shop/sticker/author/3883362

靜態貼圖

 
 
 
 
  牡羊座:狗狗角色

作者:佑佑
依照牡羊座的個性優點、個性缺點、生活習慣、理財習慣、社交習慣、愛情觀、節假日、禮貌問候,所編撰的貼圖。星座只能當參考用,不會完全準確。
購買貼圖
  金牛座:兔兔角色

作者:佑佑
依照金牛座的個性優點、個性缺點、生活習慣、理財習慣、社交習慣、愛情觀、節假日、禮貌問候,所編撰的貼圖。星座只能當參考用,不會完全準確。
購買貼圖
  雙子座:貓貓角色

作者:佑佑
依照雙子座的個性優點、個性缺點、生活習慣、理財習慣、社交習慣、愛情觀、節假日、禮貌問候,所編撰的貼圖。星座只能當參考用,不會完全準確。
購買貼圖
  巨蟹座:倉鼠角色

作者:佑佑
依照巨蟹座的個性優點、個性缺點、生活習慣、理財習慣、社交習慣、愛情觀、節假日、禮貌問候,所編撰的貼圖。星座只能當參考用,不會完全準確。
購買貼圖
 
 
 
 
  獅子座:幼獅角色

作者:佑佑
依照獅子座的個性優點、個性缺點、生活習慣、理財習慣、社交習慣、愛情觀、節假日、禮貌問候,所編撰的貼圖。星座只能當參考用,不會完全準確。
購買貼圖
  處女座:松鼠角色

作者:佑佑
依照處女座的個性優點、個性缺點、生活習慣、理財習慣、社交習慣、愛情觀、節假日、禮貌問候,所編撰的貼圖。星座只能當參考用,不會完全準確。
購買貼圖
  天秤座:鴿子角色

作者:佑佑
依照天秤座的個性優點、個性缺點、生活習慣、理財習慣、社交習慣、愛情觀、節假日、禮貌問候,所編撰的貼圖。星座只能當參考用,不會完全準確。
購買貼圖
  天蠍座:鳳凰角色

作者:佑佑
依照天蠍座的個性優點、個性缺點、生活習慣、理財習慣、社交習慣、愛情觀、節假日、禮貌問候,所編撰的貼圖。星座只能當參考用,不會完全準確。
購買貼圖
 
 
 
 
  射手座:人馬角色

作者:佑佑
依照射手座的個性優點、個性缺點、生活習慣、理財習慣、社交習慣、愛情觀、節假日、禮貌問候,所編撰的貼圖。星座只能當參考用,不會完全準確。
購買貼圖
  魔羯座:山羊角色

作者:佑佑
依照魔羯座的個性優點、個性缺點、生活習慣、理財習慣、社交習慣、愛情觀、節假日、禮貌問候,所編撰的貼圖。星座只能當參考用,不會完全準確。
購買貼圖
  水瓶座:海豚角色

作者:佑佑
依照水瓶座的個性優點、個性缺點、生活習慣、理財習慣、社交習慣、愛情觀、節假日、禮貌問候,所編撰的貼圖。星座只能當參考用,不會完全準確。
購買貼圖
  雙魚座:小丑魚角色

作者:佑佑
依照雙魚座的個性優點、個性缺點、生活習慣、理財習慣、社交習慣、愛情觀、節假日、禮貌問候,所編撰的貼圖。星座只能當參考用,不會完全準確。
購買貼圖
 
 
 
 
  上班族都變成狒狒,心裡想要說的話。

作者:佑佑
最近在台灣走紅的狒狒,用擬人化的方式,變成上班族,畫出心裡的想說的話。
購買貼圖
  接案派遣的日常

作者:佑佑
接案派遣到其他公司的日常對話,有調皮、正經、日常對話。
購買貼圖
  貓女事務員的搞笑時刻

作者:佑佑
把行政人員在職場上遇到千奇百怪的事情畫出來,用可愛的貓女來擔任行政人員的代言人。
購買貼圖
  貓貓說每天都會用到的話

作者:佑佑
日常生活常見的短句,用小貓擬人化的方式呈現,比較親切可愛。
購買貼圖
 
     
  大人的煩惱特輯:小兔角色

作者:佑佑
錢包餓了,生活苦了。變美變健康?先讓我睡飽吧。心好累,我需要充電。
購買貼圖
     

動態貼圖

 
 
 
 
  牡羊座日常交際:狗狗角色

作者:佑佑
依照牡羊座的個性,描繪日常生活的行為,供交際表達心情使用。星座只能當參考用,不會完全準確。
購買貼圖
  金牛座日常交際:兔兔角色

作者:佑佑
依照金牛座的個性,描繪日常生活的行為,供交際表達心情使用。星座只能當參考用,不會完全準確。
購買貼圖
  雙子座日常交際:貓貓角色

作者:佑佑
依照雙子座的個性,描繪日常生活的行為,供交際表達心情使用。星座只能當參考用,不會完全準確。
購買貼圖
  巨蟹座日常交際:倉鼠角色

作者:佑佑
依照巨蟹座的個性,描繪日常生活的行為,供交際表達心情使用。星座只能當參考用,不會完全準確。
購買貼圖
 
 
 
 
  獅子座日常交際:幼獅角色

作者:佑佑
依照獅子座的個性,描繪日常生活的行為,供交際表達心情使用。星座只能當參考用,不會完全準確。
購買貼圖
  處女座日常交際:松鼠角色

作者:佑佑
依照處女座的個性,描繪日常生活的行為,供交際表達心情使用。星座只能當參考用,不會完全準確。
購買貼圖
  天秤座日常交際:鴿子角色

作者:佑佑
依照天秤座的個性,描繪日常生活的行為,供交際表達心情使用。星座只能當參考用,不會完全準確。
購買貼圖
  天蠍座日常交際:鳳凰角色

作者:佑佑
依照天蠍座的個性,描繪日常生活的行為,供交際表達心情使用。星座只能當參考用,不會完全準確。
購買貼圖
 
 
 
 
  射手座日常交際:人馬角色

作者:佑佑
依照射手座的個性,描繪日常生活的行為,供交際表達心情使用。星座只能當參考用,不會完全準確。
購買貼圖
  魔羯座日常交際:山羊角色

作者:佑佑
依照魔羯座的個性,描繪日常生活的行為,供交際表達心情使用。星座只能當參考用,不會完全準確。
購買貼圖
  水瓶座日常交際:海豚角色

作者:佑佑
依照水瓶座的個性,描繪日常生活的行為,供交際表達心情使用。星座只能當參考用,不會完全準確。
購買貼圖
  雙魚座日常交際:小丑魚角色

作者:佑佑
依照雙魚座的個性,描繪日常生活的行為,供交際表達心情使用。星座只能當參考用,不會完全準確。
購買貼圖
 
     
  厭世報:鬍渣男

作者:佑佑
厭世總有個理由跟原因,實在是令人不爽,為什麼最倒楣的總是我?真希望明天就是世界末日,讓大家都一樣慘。
購買貼圖
     

表情貼

 
 
 
 
  貓貓說每天都用得到的表情貼

作者:佑佑
日常生活常見的表情用語,用小貓擬人化的方式呈現,比較親切可愛。
購買貼圖
  天秤座的表情貼:鴿子角色

作者:佑佑
日常生活常見的表情用語,天秤座的鴿子擬人化方式呈現,比較親切可愛。
購買貼圖
  天蠍座的表情貼:鳳凰角色

作者:佑佑
日常生活常見的表情用語,天蠍座的鳳凰擬人化方式呈現,比較親切可愛。
購買貼圖
  射手座的表情貼:人馬角色

作者:佑佑
日常生活常見的表情用語,射手座的人馬擬人化方式呈現,比較親切可愛。
購買貼圖
 
 
 
 
  魔羯座的表情貼:山羊角色

作者:佑佑
日常生活常見的表情用語,魔羯座的山羊擬人化方式呈現,比較親切可愛。
購買貼圖
  水瓶座的表情貼:海豚角色

作者:佑佑
日常生活常見的表情用語,水瓶座的海豚擬人化方式呈現,比較親切可愛。
購買貼圖
  雙魚座的表情貼:小丑魚角色

作者:佑佑
日常生活常見的表情用語,雙魚座的小丑魚擬人化方式呈現,比較親切可愛。
購買貼圖