2014-10-30 47 views
0

予具有式檢查9點的整數,如何使一個 「密鑰生成」 知道式

第一位數字(D1)必須是:1,2,5,6,8或9 最後一個數字( D9)必須是:0或9 9xd1 + 8xd2 + 7xd3 + 6xd4 + 5xd5 + 4xd6 + 3xd7 + 2xd8 + D9模11 = 0

我 「驗證」 鍵,但如何可以生成更多的該知道它是正確的條件?

如何從0到9生成9個不同的整數並在此公式下檢查它們?

感謝您的幫助!

+0

如果是隻有9號,爲什麼不只是蠻力呢? – 2014-10-30 19:37:42

+0

最簡單的答案是生成隨機密鑰,然後根據該公式檢查它們... – Psychemaster 2014-10-30 19:39:54

+0

一種簡單的方法是將每個段生成爲一個字符串,並將它們連接成最終數字。不用猜測,生成的數字將遵循所有規則。一旦它被連接起來,就把它轉換回一個整數。 – JayHach 2014-10-30 19:48:39

回答

1
  1. 隨機生成前7位數字,計算這些數字的公式。
  2. 將第9位的數值設爲9,並將其添加到公式中。
  3. 根據導致公式結果爲mod 11 = 0的公式計算第8位數的值。
  4. 對於嘗試執行此操作會導致mod 11 = 9時,第9位設置爲0。

實現:

Private randGen As New Random() 

Function GenNum() As Integer 
    Dim digits(0 To 8) As Integer 
    GenNum = 0 
    Dim checkSum As Integer 
    digits(0) = randGen.Next(6) + 1 
    If digits(0) >= 3 Then digits(0) += 2 
    If digits(0) >= 7 Then digits(0) += 1 
    checkSum += digits(0) * 9 
    For d As Integer = 1 To 6 
     digits(d) = randGen.Next(10) 
     checkSum += digits(d) * (9 - d) 
    Next 
    digits(8) = 9 
    checkSum += digits(8) 
    If (checkSum Mod 11) Mod 2 = 1 Then 
     digits(7) = (11 - (checkSum Mod 11)) \ 2 
    Else 
     digits(7) = ((12 - (checkSum Mod 11)) \ 2 + 4) Mod 10 
    End If 
    checkSum += digits(7) * 2 
    If checkSum Mod 11 = 9 Then digits(8) = 0 
    Dim pow10 As Integer = 1 
    For d As Integer = 8 To 0 Step -1 
     GenNum += pow10 * digits(d) 
     pow10 *= 10 
    Next 
End Function 
+0

BlueMonk,你的代碼只是缺少一件事,我試圖做但只是不能... 它必須以0或者9結尾。 – 2014-10-31 10:31:56

+0

@MiguelFigueiredo我認爲我解決了它。 – BlueMonkMN 2014-10-31 17:47:50

0

我可以幫你生成一個整數從0到9

這裏是如何表單壽LD的樣子: enter image description here

這裏是代碼:

Public Class Form1 
Dim NumRandom As Random = New Random 
Dim X, Y, Z As Integer 

Private Sub GenerateBUT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GenerateBUT.Click 
    Dim a(9), i, j, RN As Integer 
    Dim flag As Boolean 
    flag = False 
    i = 1 
    a(j) = 1 
    Do While i <= 9 
     Randomize() 
     RN = CInt(Int(9 * Rnd()) + 1) 
     For j = 1 To i 
      If (a(j)) = RN Then 
       flag = True 
       Exit For 
      End If 
     Next 
     If flag = True Then 
      flag = False 
     Else 
      a(i) = RN 
      i = i + 1S 
     End If 
    Loop 
    Label1.Text = a(1) 
    Label2.Text = a(2) 
    Label3.Text = a(3) 
    Label4.Text = a(4) 
    Label5.Text = a(5) 
    Label6.Text = a(6) 
    Label7.Text = a(7) 
    Label8.Text = a(8) 
    Label9.Text = a(9) 
    Z = Label4.Text 
    Y = Label5.Text 
    X = Z + Y 
    X = X - Label3.Text 
    If X > 1 And X < 10 Then 
     X = NumRandom.Next(1, 7) 
     If X = 1 Then 
      Label1.Text = "0" 
     ElseIf X = 2 Then 
      Label2.Text = "0" 
     ElseIf X = 3 Then 
      Label3.Text = "0" 
     ElseIf X = 4 Then 
      Label4.Text = "0" 
     ElseIf X = 5 Then 
      Label5.Text = "0" 
     ElseIf X = 6 Then 
      Label6.Text = "0" 
     ElseIf X = 7 Then 
      Label7.Text = "0" 
     End If 
    End If 
End Sub 

末級