-
RE: Nhờ tính giúp tài khoản số đẹp trong ngân hàng
ledangvan > 06-06-21, 12:21 PM
(05-06-21, 02:24 PM)tungthoi15 Đã viết:
(05-06-21, 09:55 AM)ledangvan Đã viết: Đại khái như này : https://www.mediafire.com/file/qvncuql1i...p.mdb/file
Rất cám ơn bác Ledangvan ạ! Nhưng
Chẳng cần tẹo code nào
(Tôi mới thử phân tích 4 số cuối chùng nhau, ví dụ : 1111, 2222, 3333 ...)
Vấn đề là không đơn giản như thế đâu bác ơi.
Vì đấy là số lặp cuối 3 số, hay 4 số hay 7, hoặc 8 số thì cũng dễ thôi
Thế bây giờ tìm số tài khoản đấy có bao nhiêu số tam hoa, mà tam hoa thì tính bất kỳ đâu trong số tài khoản
Có 1 tam hoa, hay là 2 tam hoa, hay là 3 tam hoa
Bác có liệt kê hết được không??
Tài khoản của Agribank thì luôn là 13 số theo dạng: xxxx-yyyyyyyyy
Trong đó xxxx là mã chi nhánh, còn yyyyyyyyy thì tự ý thay đổi
Tôi nói luật chơi là do bạn qui định cơ mà : Thỉnh thoảng bạn lại cho một nội dung : 4 số đuôi, tám số đít, tiến lùi . tam hoa, bát nhị ...
Bạn ra luật của nó thì tự điền vào cái định nghĩa ở bảng 1 như tôi ví dụ, lúc phân tích nó sẽ chọn đúng với kết quả nào thì nó tương ứng với số tiền mà khách phải trả.
Đây là định nghĩa chứ ko phải viết code -
RE: Nhờ tính giúp tài khoản số đẹp trong ngân hàng
ongke0711 > 08-06-21, 08:25 AM
Hôm nay rảnh làm demo cho bạn một số trường hợp.
- Số tiến vị trí bất kỳ, và vị trí cuối: 3 ,4, 5, 6 số
- Số trùng vị trí cuối: 3, 4 ,5, 6 số trùng.
Code:
Mã PHP:Option Compare Database
Option Explicit
Const sNumList As String = "0123456789"
Sub test()
Dim inputNum As String, i As Integer
inputNum = "1523276723456"
Debug.Print "[So TK: " & inputNum & "]"
For i = 3 To 6
Call kiemTraSoTienCuoi(i, inputNum)
Next
End Sub
Sub test1()
Dim inputNum As String, i As Integer
inputNum = "1523696781436"
Debug.Print "[So TK: " & inputNum & "]"
For i = 3 To 6
Call kiemTraSoTienBatKy(i, inputNum)
Next
End Sub
Sub test2()
Dim inputNum As String, i As Integer
inputNum = "1536787333333"
Debug.Print "[So TK: " & inputNum & "]"
For i = 3 To 6
Call kiemTraSoTrungCuoi(i, inputNum)
Next
End Sub
Sub kiemTraSoTienBatKy(so As Integer, inputNum As String) 'so: 3,4,5,6 sô tién
Dim arrListNum() As String, i As Integer, k As Integer, ret As Boolean
arrListNum = Split(listSoTien3456Cuoi(so), ",")
ret = False
For i = 0 To UBound(arrListNum)
For k = 5 To Len(inputNum) - so + 1
If Mid(inputNum, k, so) = arrListNum(i) Then
ret = True
Exit For
End If
Next k
Next i
'MsgBox "- " & so & " so tien vi tri bat ky: " & ret
Debug.Print "- " & so & " so tien vi tri bat ky: " & ret
End Sub
Sub kiemTraSoTienCuoi(so As Integer, inputNum As String) 'so: 3,4,5,6 sô tién
Dim arrListNum() As String, i As Integer, ret As Boolean
arrListNum = Split(listSoTien3456Cuoi(so), ",")
ret = False
For i = 0 To UBound(arrListNum)
If Right(inputNum, so) = arrListNum(i) Then
ret = True
Exit For
End If
Next
'MsgBox "- " & so & " so tien cuoi: " & ret
Debug.Print "- " & so & " so tien cuoi: " & ret
End Sub
Sub kiemTraSoTrungCuoi(so As Integer, inputNum As String) 'so: 3,4,5 sô trùng - tam, tu ngu hoa
Dim arrListNum() As String, i As Integer, ret As Boolean
arrListNum = Split(listSoCuoiTrung345(so), ",")
ret = False
For i = 0 To UBound(arrListNum)
If Right(inputNum, so) = arrListNum(i) Then
ret = True
Exit For
End If
Next
'MsgBox "- " & so & " so trung cuoi: " & ret
Debug.Print "- " & so & " so trung cuoi: " & ret
End Sub
Function listSoTien3456Cuoi(iNumOfDigit As Integer) As String
Dim i As Long
listSoTien3456Cuoi = ""
For i = 1 To Len(sNumList) - (iNumOfDigit - 1)
listSoTien3456Cuoi = listSoTien3456Cuoi & Mid(sNumList, i, iNumOfDigit) & ","
Next
listSoTien3456Cuoi = Left(listSoTien3456Cuoi, Len(listSoTien3456Cuoi) - 1)
End Function
Function listSoCuoiTrung345(iNumOfDigit As Integer) As String
Dim i As Integer, k As Integer
listSoCuoiTrung345 = ""
For i = 0 To Len(sNumList) - 1
For k = 1 To iNumOfDigit
listSoCuoiTrung345 = listSoCuoiTrung345 & i
Next k
listSoCuoiTrung345 = listSoCuoiTrung345 & ","
Next i
listSoCuoiTrung345 = Left(listSoCuoiTrung345, Len(listSoCuoiTrung345) - 1)
End Function -
RE: Nhờ tính giúp tài khoản số đẹp trong ngân hàng
ongke0711 > 08-06-21, 06:11 PM
Hàm kiểm tra 2 số lập lại 2, 3, 4 lần.
Mã PHP:Sub test3()
Dim inputNum As String, i As Integer
inputNum = "1536743434343"
Debug.Print "[So TK: " & inputNum & "]"
For i = 2 To 4
Call kiemTra2SoLap(i, inputNum)
Next
End Sub
Sub kiemTra2SoLap(solan As Integer, inputNum As String) '2,3,4 lan
Dim i As Integer, ret As Boolean
ret = False
For i = 0 To UBound(arrChinhHop2)
If Right(inputNum, solan * 2) = repeatString(solan, arrChinhHop2(i)) Then
ret = True
Exit For
End If
Next
'MsgBox "- " & so & " so trung cuoi: " & ret
Debug.Print "- 2 so cuoi lap " & solan & " lan: " & ret
End Sub
Function arrChinhHop2() As Variant 'n=10
Dim s As String
Const sNum As String = "0123456789"
'01 02 03 04 05 06 07 08 09 10 12 13 14 15 16 ...: 89 cap so
Dim i As Integer, k As Integer
s = ""
For i = 1 To Len(sNum)
For k = 1 To Len(sNum)
If Mid(sNum, i, 1) <> Mid(sNum, k, 1) Then 'bo qua so 00,11,22,...,99
s = s & Mid(sNum, i, 1) & Mid(sNum, k, 1) & ","
End If
Next k
Next i
s = Left(s, Len(s) - 1)
'Debug.Print s
arrChinhHop2 = Split(s, ",")
'Debug.Print UBound(arrChinhHop2)
End Function
Function repeatString(n As Integer, str As Variant) As String
repeatString = Replace(Space(n), " ", str)
End Function -
RE: Nhờ tính giúp tài khoản số đẹp trong ngân hàng
tungthoi15 > 09-06-21, 10:11 AM
(08-06-21, 06:11 PM)ongke0711 Đã viết: Hàm kiểm tra 2 số lập lại 2, 3, 4 lần.
Em chân thành cảm ơn @OngKe0711 ạ, Diễn đàn này thật may mắn có được thành viên như bác, đầy nhiệt tình và tâm huyết.
Mã PHP:Sub test3()
Dim inputNum As String, i As Integer
inputNum = "1536743434343"
Debug.Print "[So TK: " & inputNum & "]"
For i = 2 To 4
Call kiemTra2SoLap(i, inputNum)
Next
End Sub
Sub kiemTra2SoLap(solan As Integer, inputNum As String) '2,3,4 lan
Dim i As Integer, ret As Boolean
ret = False
For i = 0 To UBound(arrChinhHop2)
If Right(inputNum, solan * 2) = repeatString(solan, arrChinhHop2(i)) Then
ret = True
Exit For
End If
Next
'MsgBox "- " & so & " so trung cuoi: " & ret
Debug.Print "- 2 so cuoi lap " & solan & " lan: " & ret
End Sub
Function arrChinhHop2() As Variant 'n=10
Dim s As String
Const sNum As String = "0123456789"
'01 02 03 04 05 06 07 08 09 10 12 13 14 15 16 ...: 89 cap so
Dim i As Integer, k As Integer
s = ""
For i = 1 To Len(sNum)
For k = 1 To Len(sNum)
If Mid(sNum, i, 1) <> Mid(sNum, k, 1) Then 'bo qua so 00,11,22,...,99
s = s & Mid(sNum, i, 1) & Mid(sNum, k, 1) & ","
End If
Next k
Next i
s = Left(s, Len(s) - 1)
'Debug.Print s
arrChinhHop2 = Split(s, ",")
'Debug.Print UBound(arrChinhHop2)
End Function
Function repeatString(n As Integer, str As Variant) As String
repeatString = Replace(Space(n), " ", str)
End Function -
RE: Nhờ tính giúp tài khoản số đẹp trong ngân hàng
ongke0711 > 12-06-21, 10:42 AM
Đảo 2, 3 số cuối.
Mã PHP:Sub test4()
Dim inputNum As String, i As Integer
inputNum = "1536743342243"
Debug.Print "[So TK: " & inputNum & "]"
For i = 2 To 3
Call kiemTraDaoSo(i, inputNum)
Next
End Sub
Sub kiemTraDaoSo(sokytu As Integer, inputNum As String)
'Dao 2 so: 5665
'Dao 3 so: 867769
Dim strDaoSo As String, ret As Boolean
ret = False
strDaoSo = DaoChuSo(Right(inputNum, sokytu)) & Right(inputNum, sokytu)
If Right(inputNum, sokytu * 2) = strDaoSo Then
ret = True
End If
Debug.Print "- Dao " & sokytu & " so cuoi: " & ret
End Sub
Function DaoChuSo(sText As String, Optional isNum As Boolean) As Variant
Dim i As Integer
Dim strNewTxt As String
Dim strOld As String
strOld = Trim(sText)
For i = 1 To Len(strOld)
strNewTxt = Mid(strOld, i, 1) & strNewTxt
Next i
If isNum = True Then
DaoChuSo = CLng(strNewTxt)
Else
DaoChuSo = strNewTxt
End If
End Function -
RE: Nhờ tính giúp tài khoản số đẹp trong ngân hàng
ongke0711 > 15-06-21, 12:37 AM
Chốt bài phân tích mấy con số này nhé. Các trường hợp khác nhìn bẳng mắt vậy.
Bạn muốn chế biến kiểu khác thì vẫn dùng mấy cái hàm kiểm số rồi biến tấu lên form thôi.
Link demo: https://drive.google.com/file/d/1_LYbZh8...sp=sharing
-
RE: Nhờ tính giúp tài khoản số đẹp trong ngân hàng
tungthoi15 > 15-06-21, 11:16 AM
(15-06-21, 12:37 AM)ongke0711 Đã viết: Chốt bài phân tích mấy con số này nhé. Các trường hợp khác nhìn bẳng mắt vậy.
Bạn muốn chế biến kiểu khác thì vẫn dùng mấy cái hàm kiểm số rồi biến tấu lên form thôi.
Link demo: https://drive.google.com/file/d/1_LYbZh8...sp=sharing
Vâng, cám ơn bác, Nhờ có sự giúp đỡ nhiệt tình của bác. Em đã làm và học hỏi được nhiều ạ. -
RE: Nhờ tính giúp tài khoản số đẹp trong ngân hàng
tungthoi15 > 15-06-21, 11:28 AM
To: OngKe0711
Em xong hết rồi, còn đúng 1 trường hợp nữa là tính các cặp số kép 00, 11 ,22....99 liền nhau nằm bất kỳ đâu trong dãy số, bác giúp em với
Nó gần giống đoạn code này của bác, nhưng em chưa chế biến theo được
Mã:Sub kiemTra2SoLap234(inputNum As String) '2,3,4 lan
'Lap 2 lan: 1212
'Lap 3 lan: 121212
Dim checkStr As String, i As Integer, j As Integer, ret As Boolean
checkStr = Right(inputNum, 2)
If IsIn(checkStr, "00,11,22,33,44,55,66,77,88,99") Then Exit Sub 'Loai bo truong hop so Tam hoa, so trung
For i = 2 To 4
If Right(inputNum, i * 2) = repeatString(i, checkStr) Then
ret = True
j = i
End If
Next i
If j > 0 Then
sMsgTotal = sMsgTotal & vbCrLf & vbCrLf & "# 2 s" & ChrW(7889) & " cu" & ChrW(7889) & "i l" & ChrW(7863) & "p [" & j & "] l" & ChrW(7847) & "n: " & Right(inputNum, j * 2)
Debug.Print "# 2 so cuoi lap " & j & " lan: " & ret
End If
End Sub -
RE: Nhờ tính giúp tài khoản số đẹp trong ngân hàng
ongke0711 > 15-06-21, 12:56 PM
(15-06-21, 11:28 AM)tungthoi15 Đã viết: To: OngKe0711
Em xong hết rồi, còn đúng 1 trường hợp nữa là tính các cặp số kép 00, 11 ,22....99 liền nhau nằm bất kỳ đâu trong dãy số, bác giúp em với
Nó gần giống đoạn code này của bác, nhưng em chưa chế biến theo được
Chế biến từ code lấy số Tam Hoa kép + số tiến vị trí bất kỳ.
Mã PHP:Sub kiemTraDaySoDoi(inputNum As String)
Dim sLis2soTrung As String, checkStr As String, ret As Boolean
Dim i As Integer, j As Integer, k As Integer, n As Integer, so As String
sLis2soTrung = listSoCuoiTrung3456(2)
j = 0
For i = 2 To 4 '2-4 cap so trùng
For k = 1 To Len(inputNum) - i + 1
checkStr = Mid$(inputNum, k, i * 2)
ret = IsIn(Left$(checkStr, 2), sLis2soTrung) And IsIn(Right$(checkStr, 2), sLis2soTrung)
For n = 2 To i
ret = ret And IsIn(Mid$(checkStr, n * 2 - 1, 2), sLis2soTrung)
Next n
If ret = True Then
j = i 'Luu so cap cao nhat
so = Mid$(inputNum, k, j * 2)
Exit For
End If
Next k
Next i
If j >= 2 Then
sMsgTotal = sMsgTotal & vbCrLf & vbCrLf & "# Có [" & j & "] c" & ChrW(7863) & "p s" & ChrW(7889) & " " & ChrW(273) & "ôi: " & so
Debug.Print "# Có [" & j & "] cap so doi: " & so
End If
End Sub -
RE: Nhờ tính giúp tài khoản số đẹp trong ngân hàng
tungthoi15 > 15-06-21, 04:34 PM
(15-06-21, 12:56 PM)ongke0711 Đã viết:
(15-06-21, 11:28 AM)tungthoi15 Đã viết: To: OngKe0711
Em xong hết rồi, còn đúng 1 trường hợp nữa là tính các cặp số kép 00, 11 ,22....99 liền nhau nằm bất kỳ đâu trong dãy số, bác giúp em với
Nó gần giống đoạn code này của bác, nhưng em chưa chế biến theo được
Chế biến từ code lấy số Tam Hoa kép + số tiến vị trí bất kỳ.
Mã PHP:Sub kiemTraDaySoDoi(inputNum As String)
Dim sLis2soTrung As String, checkStr As String, ret As Boolean
Dim i As Integer, j As Integer, k As Integer, n As Integer, so As String
sLis2soTrung = listSoCuoiTrung3456(2)
j = 0
For i = 2 To 4 '2-4 cap so trùng
For k = 1 To Len(inputNum) - i + 1
checkStr = Mid$(inputNum, k, i * 2)
ret = IsIn(Left$(checkStr, 2), sLis2soTrung) And IsIn(Right$(checkStr, 2), sLis2soTrung)
For n = 2 To i
ret = ret And IsIn(Mid$(checkStr, n * 2 - 1, 2), sLis2soTrung)
Next n
If ret = True Then
j = i 'Luu so cap cao nhat
so = Mid$(inputNum, k, j * 2)
Exit For
End If
Next k
Next i
If j >= 2 Then
sMsgTotal = sMsgTotal & vbCrLf & vbCrLf & "# Có [" & j & "] c" & ChrW(7863) & "p s" & ChrW(7889) & " " & ChrW(273) & "ôi: " & so
Debug.Print "# Có [" & j & "] cap so doi: " & so
End If
End Sub
Quá tuyệt vời ông mặt trời rồi, em cám ơn bác ạ