PDA

View Full Version : عدد وارسی فایلهای بانک ملی



علی اکبر
چهارشنبه 05 خرداد 1389, 15:11 عصر
دوستان سلام
نرم افزار ضمیمه مربوط به بانک ملی است که بابت هر فایل یک عدد وارسی تولید می کند
قصد دارم این عدد را توسط برنامه خودم تولید کنم
اول اینکه آیا می شود الگوریتم استفاده شده در این برنامه را بدست بیاریم
ممنون می شوم کمک کنید

Mani_rf
چهارشنبه 05 خرداد 1389, 16:41 عصر
در این برنامه از این الگوریتم استفاده شده :

Private Sub CheckSum()
Me.count_string
Dim strArray7 As String() = New String(50 - 1) {}
Dim array As String() = New String(&H15 - 1) {}
Dim strArray5 As String() = New String(&H13 - 1) {}
Dim strArray As String() = New String(&H10 - 1) {}
Dim strArray2 As String() = New String(10 - 1) {}
Dim strArray3 As String() = New String(5 - 1) {}
Dim num4 As Integer = 0
Dim num As Long = &H13
Dim num2 As Long = &H15
Dim num3 As Long = 9
Dim num10 As Long = 0
Dim num11 As Long = 0
Dim num12 As Long = 0
Dim num18 As Long = 0
Me.check_no = 0
Dim reader As New StreamReader(Me.path)
Dim strArray6 As String() = reader.ReadToEnd.Split(New Char() { ChrW(13) })
Dim str9 As String
For Each str9 In strArray6
Dim num5 As Integer
Dim str12 As String
num5 += 1
If (num5 = 1) Then
str12 = str9.PadRight(&H30, "0"c)
Else
Dim str11 As String
Dim num15 As Long
Dim num16 As Long
Dim num17 As Long
If (StringType.StrCmp(strArray6((strArray6.Length - 1)).Trim, "", False) = 0) Then
If (num5 = (Me.count + 1)) Then
str9 = str11
End If
If (num5 > (Me.count + 1)) Then
Exit For
End If
End If
If (str9.Length < &H30) Then
str9 = (str9 & "0" & str12.Substring((str9.Length + 1)))
End If
Dim index As Short = 0
Do
array(index) = StringType.FromChar(str9.Chars((index + 1)))
index = CShort((index + 1))
Loop While (index <= 4)
array(5) = StringType.FromInteger(0)
index = 0
Do
strArray5(index) = StringType.FromChar(str9.Chars((index + 1)))
index = CShort((index + 1))
Loop While (index <= &H11)
strArray5(&H12) = StringType.FromInteger(0)
Dim num8 As Short = &H12
index = 0
Do
strArray(index) = StringType.FromChar(str9.Chars((num8 + 1)))
num8 = CShort((num8 + 1))
index = CShort((index + 1))
Loop While (index <= 14)
strArray(15) = StringType.FromInteger(0)
strArray.CopyTo(array, 5)
index = 0
Do
num = (num - 1)
num15 = ((Strings.Asc(strArray5(index)) - Strings.Asc(StringType.FromInteger(0))) * num)
num10 = (num15 + num10)
index = CShort((index + 1))
Loop While (index <= &H11)
num8 = 0
Do
num2 = (num2 - 1)
num16 = ((Strings.Asc(array(num8)) - Strings.Asc(StringType.FromInteger(0))) * num2)
num11 = (num16 + num11)
num8 = CShort((num8 + 1))
Loop While (num8 <= 20)
Dim str4 As String = num10.ToString
Dim str7 As String = num11.ToString
Dim str3 As String = (str4 & str7)
Dim length As Long = str3.Length
index = 0
Do
strArray2(index) = StringType.FromInteger(0)
index = CShort((index + 1))
Loop While (index <= 9)
Dim num20 As Short = CShort((length - 1))
index = 0
Do While (index <= num20)
strArray2(index) = StringType.FromChar(str3.Chars(index))
index = CShort((index + 1))
Loop
num3 = (length + 1)
Dim num19 As Short = CShort(length)
Dim num9 As Short = 0
Do While (num9 <= num19)
num3 = (num3 - 1)
num17 = ((Strings.Asc(strArray2(num9)) - Strings.Asc(StringType.FromInteger(0))) * num3)
num12 = (num17 + num12)
num9 = CShort((num9 + 1))
Loop
num4 += 1
num18 = (num12 * num4)
Me.check_no = (num18 + Me.check_no)
num = &H13
num2 = &H15
num3 = 9
num10 = 0
num11 = 0
num12 = 0
index = CShort(-((CInt(-((num8 = num9) > False)) = 0) > False))
num15 = CLng(-((CInt(-((CLng(-((num16 = num17) > False)) = num18) > False)) = 0) > False))
length = 0
str11 = str9
End If
str12 = str9.PadRight(&H30, "0"c)
Next
reader.Close
Do While (Me.check_no > &H100000000)
Me.check_no = (Me.check_no - &H100000000)
Loop
End Sub

علی اکبر
پنج شنبه 06 خرداد 1389, 07:54 صبح
دوست عزیز تشکر از لطف شما
اگر امکان داره بفرمائید چگونه بدست آوردید؟وضمن اینکه من با وی بی زیاد اشنا نیستم
وقتی داخل یک پروژه این کدها رو منتقل می کنم ارورهای زیادی داره
امکان داره دوستان یک مثال استفاده شده از این الگوریتم را اینجا بزارند ممنون

hero4000
پنج شنبه 06 خرداد 1389, 08:20 صبح
دوست عزيز ميشه يک توضيحي در مورد اين فايل بانک ملي بدي

ممنون

علی اکبر
پنج شنبه 06 خرداد 1389, 09:22 صبح
جهت پرداخت حقوق پرسنل به صورت فایل
بانک یک فرمت مشخص دارد که بر همان اساس باید تهیه گردد
بایستی همراه با فایل نامه تاییدیه هم امضا گردد وبه بانک ارسال گردد
در این نامه عدد واررسی یا رمز مربوط به ان فایل نیز قید می گردد
هر فایل براساس مشخصات خودش رمز مشخصی دارد
تا بانک مطمئن گردد فایل ارسالی دقیقا همان فایل مورد نظر سازمان می باشد
این عدد رمز براساس همی الگوریتم تهیه می شود

Mani_rf
جمعه 07 خرداد 1389, 14:40 عصر
این هم بدون Error. فایل پروژه را هم برات گذاشتم.


Private check_no As Long = 0
Private count As Integer
Private flag_file As Boolean
Private flag_masir As Integer
Private path As String
Private Sub CheckSum()
Me.count_string()
Dim strArray7 As String() = New String(50 - 1) {}
Dim array As String() = New String(&H15 - 1) {}
Dim strArray5 As String() = New String(&H13 - 1) {}
Dim strArray As String() = New String(&H10 - 1) {}
Dim strArray2 As String() = New String(10 - 1) {}
Dim strArray3 As String() = New String(5 - 1) {}
Dim num4 As Integer = 0
Dim num As Long = &H13
Dim num2 As Long = &H15
Dim num3 As Long = 9
Dim num10 As Long = 0
Dim num11 As Long = 0
Dim num12 As Long = 0
Dim num18 As Long = 0
Me.check_no = 0
Dim reader As New StreamReader(Me.path)
Dim strArray6 As String() = reader.ReadToEnd.Split(New Char() {ChrW(13)})
Dim str9 As String
For Each str9 In strArray6
Dim num5 As Integer
Dim str12 As String
num5 += 1
If (num5 = 1) Then
str12 = str9.PadRight(&H30, "0"c)
Else
Dim str11 As String
Dim num15 As Long
Dim num16 As Long
Dim num17 As Long
If (StringType.StrCmp(strArray6((strArray6.Length - 1)).Trim, "", False) = 0) Then
If (num5 = (Me.count + 1)) Then
str9 = str11
End If
If (num5 > (Me.count + 1)) Then
Exit For
End If
End If
If (str9.Length < &H30) Then
str9 = (str9 & "0" & str12.Substring((str9.Length + 1)))
End If
Dim index As Short = 0
Do
array(index) = StringType.FromChar(str9.Chars((index + 1)))
index = CShort((index + 1))
Loop While (index <= 4)
array(5) = StringType.FromInteger(0)
index = 0
Do
strArray5(index) = StringType.FromChar(str9.Chars((index + 1)))
index = CShort((index + 1))
Loop While (index <= &H11)
strArray5(&H12) = StringType.FromInteger(0)
Dim num8 As Short = &H12
index = 0
Do
strArray(index) = StringType.FromChar(str9.Chars((num8 + 1)))
num8 = CShort((num8 + 1))
index = CShort((index + 1))
Loop While (index <= 14)
strArray(15) = StringType.FromInteger(0)
strArray.CopyTo(array, 5)
index = 0
Do
num = (num - 1)
num15 = ((Strings.Asc(strArray5(index)) - Strings.Asc(StringType.FromInteger(0))) * num)
num10 = (num15 + num10)
index = CShort((index + 1))
Loop While (index <= &H11)
num8 = 0
Do
num2 = (num2 - 1)
num16 = ((Strings.Asc(array(num8)) - Strings.Asc(StringType.FromInteger(0))) * num2)
num11 = (num16 + num11)
num8 = CShort((num8 + 1))
Loop While (num8 <= 20)
Dim str4 As String = num10.ToString
Dim str7 As String = num11.ToString
Dim str3 As String = (str4 & str7)
Dim length As Long = str3.Length
index = 0
Do
strArray2(index) = StringType.FromInteger(0)
index = CShort((index + 1))
Loop While (index <= 9)
Dim num20 As Short = CShort((length - 1))
index = 0
Do While (index <= num20)
strArray2(index) = StringType.FromChar(str3.Chars(index))
index = CShort((index + 1))
Loop
num3 = (length + 1)
Dim num19 As Short = CShort(length)
Dim num9 As Short = 0
Do While (num9 <= num19)
num3 = (num3 - 1)
num17 = ((Strings.Asc(strArray2(num9)) - Strings.Asc(StringType.FromInteger(0))) * num3)
num12 = (num17 + num12)
num9 = CShort((num9 + 1))
Loop
num4 += 1
num18 = (num12 * num4)
Me.check_no = (num18 + Me.check_no)
num = &H13
num2 = &H15
num3 = 9
num10 = 0
num11 = 0
num12 = 0
index = CShort(-((CInt(-((num8 = num9) > False)) = 0) > False))
num15 = CLng(-((CInt(-((CLng(-((num16 = num17) > False)) = num18) > False)) = 0) > False))
length = 0
str11 = str9
End If
str12 = str9.PadRight(&H30, "0"c)
Next
reader.Close()
Do While (Me.check_no > &H100000000)
Me.check_no = (Me.check_no - &H100000000)
Loop
End Sub
Private Sub count_string()
Me.count = 0
Dim reader As New StreamReader(Me.path)
Dim str As String = reader.ReadLine
Do While (StringType.StrCmp(Strings.Trim(str), String.Empty, False) <> 0)
str = reader.ReadLine
Me.count += 1
Loop
reader.Close()
End Sub
Private Sub dec_35()
Dim num3 As Integer = 1
Dim chArray As Char() = New Char(20 - 1) {}
Dim strArray As String() = New String(10 - 1) {}
Dim index As Integer = 0
Do
chArray(index) = ChrW(0)
index += 1
Loop While (index <= &H13)
index = 0
Do
strArray(index) = ""
index += 1
Loop While (index <= 9)
Dim num5 As Integer = 0
Do While ((Me.check_no > &H24) Or (num3 = 1))
Dim num7 As Long = (Me.check_no Mod &H23)
Dim str As String = num7.ToString
Dim num9 As Long = num7
If ((num9 <= &H23) AndAlso (num9 >= 10)) Then
Select Case CInt((num9 - 10))
Case 0
chArray(num5) = Strings.Chr((&H41 + Strings.Asc(chArray(num5))))
GoTo Label_03EC
Case 1
chArray(num5) = Strings.Chr((&H42 + Strings.Asc(chArray(num5))))
GoTo Label_03EC
Case 2
chArray(num5) = Strings.Chr((&H43 + Strings.Asc(chArray(num5))))
GoTo Label_03EC
Case 3
chArray(num5) = Strings.Chr((&H44 + Strings.Asc(chArray(num5))))
GoTo Label_03EC
Case 4
chArray(num5) = Strings.Chr((&H45 + Strings.Asc(chArray(num5))))
GoTo Label_03EC
Case 5
chArray(num5) = Strings.Chr((70 + Strings.Asc(chArray(num5))))
GoTo Label_03EC
Case 6
chArray(num5) = Strings.Chr((&H47 + Strings.Asc(chArray(num5))))
GoTo Label_03EC
Case 7
chArray(num5) = Strings.Chr((&H48 + Strings.Asc(chArray(num5))))
GoTo Label_03EC
Case 8
chArray(num5) = Strings.Chr((&H49 + Strings.Asc(chArray(num5))))
GoTo Label_03EC
Case 9
chArray(num5) = Strings.Chr((&H4A + Strings.Asc(chArray(num5))))
GoTo Label_03EC
Case 10
chArray(num5) = Strings.Chr((&H4B + Strings.Asc(chArray(num5))))
GoTo Label_03EC
Case 11
chArray(num5) = Strings.Chr((&H4C + Strings.Asc(chArray(num5))))
GoTo Label_03EC
Case 12
chArray(num5) = Strings.Chr((&H4D + Strings.Asc(chArray(num5))))
GoTo Label_03EC
Case 13
chArray(num5) = Strings.Chr((&H4E + Strings.Asc(chArray(num5))))
GoTo Label_03EC
Case 14
chArray(num5) = Strings.Chr((&H4F + Strings.Asc(chArray(num5))))
GoTo Label_03EC
Case 15
chArray(num5) = Strings.Chr((80 + Strings.Asc(chArray(num5))))
GoTo Label_03EC
Case &H10
chArray(num5) = Strings.Chr((&H51 + Strings.Asc(chArray(num5))))
GoTo Label_03EC
Case &H11
chArray(num5) = Strings.Chr((&H52 + Strings.Asc(chArray(num5))))
GoTo Label_03EC
Case &H12
chArray(num5) = Strings.Chr((&H53 + Strings.Asc(chArray(num5))))
GoTo Label_03EC
Case &H13
chArray(num5) = Strings.Chr((&H54 + Strings.Asc(chArray(num5))))
GoTo Label_03EC
Case 20
chArray(num5) = Strings.Chr((&H55 + Strings.Asc(chArray(num5))))
GoTo Label_03EC
Case &H15
chArray(num5) = Strings.Chr((&H56 + Strings.Asc(chArray(num5))))
GoTo Label_03EC
Case &H16
chArray(num5) = Strings.Chr((&H57 + Strings.Asc(chArray(num5))))
GoTo Label_03EC
Case &H17
chArray(num5) = Strings.Chr((&H58 + Strings.Asc(chArray(num5))))
GoTo Label_03EC
Case &H18
chArray(num5) = Strings.Chr((&H59 + Strings.Asc(chArray(num5))))
GoTo Label_03EC
Case &H19
chArray(num5) = Strings.Chr((90 + Strings.Asc(chArray(num5))))
GoTo Label_03EC
End Select
End If
chArray(num5) = Strings.Chr((Strings.Asc(str.Chars(0)) + Strings.Asc(chArray(num5))))
Label_03EC:
If (Me.check_no < &H24) Then
num3 = 0
Exit Do
End If
num5 += 1
Me.check_no = (Me.check_no / &H23)
Loop
Dim num8 As Integer = (8 - num5)
Dim i As Integer = 0
Do While (i <= num8)
strArray(i) = "0"
i += 1
Loop
Strings.Join(strArray, "")
MessageBox.Show((Strings.Join(strArray, "").ToString & New String(chArray)), ChrW(1585) & ChrW(1605) & ChrW(1586) & " " & ChrW(1601) & ChrW(1575) & ChrW(1610) & ChrW(1604), MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
index = 0
Do
chArray(index) = ChrW(0)
index += 1
Loop While (index <= &H13)
index = 0
Do
strArray(index) = ""
index += 1
Loop While (index <= 9)
Me.check_no = 0
Me.count = 0
End Sub
Private Sub testfile()
Dim str As String = New StreamReader(Me.path).ReadToEnd
Dim num2 As Long = (str.Length - 1)
Dim i As Long = 0
Do While (i <= num2)
Select Case str.Chars(CInt(i))
Case ChrW(10)
Me.flag_file = True
Continue Do
Case ChrW(13)
Me.flag_file = True
Continue Do
Case " "c
Me.flag_file = True
Continue Do
Case "0"c
Me.flag_file = True
Continue Do
Case "1"c
Me.flag_file = True
Continue Do
Case "2"c
Me.flag_file = True
Continue Do
Case "3"c
Me.flag_file = True
Continue Do
Case "4"c
Me.flag_file = True
Continue Do
Case "5"c
Me.flag_file = True
Continue Do
Case "6"c
Me.flag_file = True
Continue Do
Case "7"c
Me.flag_file = True
Continue Do
Case "8"c
Me.flag_file = True
Continue Do
Case "9"c
Me.flag_file = True
Continue Do
End Select
Me.flag_file = False
Return
i = (i + 1)
Loop
End Sub

als_1360
یک شنبه 30 خرداد 1389, 20:16 عصر
این الگوریتم هم اشکال دارد و با عددی که نرم افزار بانک تولید می کند متفاوت است

اگر ممکنه توضیحی کلی نیز در خصوص این الگوریتم و نرم افزار چک سام بدهید که چه گونه کار می کند و روش کار آن چیست
ممنون

mehditaj
دوشنبه 17 آبان 1389, 00:13 صبح
سلام دوستان
لطفا اگه ميشه بگيد طريقه تبديل اين كد به زبان php چگونه است؟؟؟؟؟
خيلي لازمش دارم و واجبه.
باتشكر