Hàm để mã hóa các ký tự

Liên hệ QC

vietcnttit

Thành viên mới
Tham gia
14/6/10
Bài viết
43
Được thích
5
Ví dụ tôi đang có chuỗi bất kì: sdjhkjhf237_fdsjkjlHHJ
Tôi muốn dùng hàm để chuyển chuỗi này thành 1 dãy số theo phương pháp bất kì (miễn sao thành chuỗi số là được)
Vd: 2317947958795894378978567895 (số này đánh đại để vd)

E đã thử dùng hàm chuyển từng kí tự sang số theo mã unicode sau đó ghép lại mà k được, e cũng dùng cách mã hoá chuỗi theo hex mà cũng k xong, các trang nước ngoài k ai có thông tin này.

Đau đầu quá trời cả ngày rui mà vẫn chưa tìm ra cách tối ưu. Mong các anh chị nhiệt tình giúp đỡ. Chân thành cám ơn!!
 
Lần chỉnh sửa cuối:
Ví dụ tôi đang có chuỗi bất kì: sdjhkjhf237_fdsjkjlHHJ
Tôi muốn chuyển chuỗi này thành 1 dãy số theo phương pháp bất kì (miễn sao thành chuỗi số là được)
Vd: 2317947958795894378978567895

Đau đầu quá trời cả ngày ruid mà vẫn chưa tìm ra cách tối ưu. Mong các anh chị nhiệt tình giúp đỡ. Chân thành cám ơn!!

Vậy phương pháp bất kì ấy là phương pháp gì?
Con số 2317947958795894378978567895 ở đâu ra vậy?
 
Upvote 0
Ví dụ tôi đang có chuỗi bất kì: sdjhkjhf237_fdsjkjlHHJ
Tôi muốn chuyển chuỗi này thành 1 dãy số theo phương pháp bất kì (miễn sao thành chuỗi số là được)
Vd: 2317947958795894378978567895

Đau đầu quá trời cả ngày ruid mà vẫn chưa tìm ra cách tối ưu. Mong các anh chị nhiệt tình giúp đỡ. Chân thành cám ơn!!
Chuỗi text có 22 ký tự chuyển thành chuỗi số có 28 ký tự, cuối cùng thì bạn cần bao 1 số có bao nhiêu chữ số?
Trên bảng tính Excel số có tối đa là 15 ký tự (sai số 100 ngàn tỷ), nên số có 16 ký tự trở lên bạn phải chuyển sang Text.
Hàm lấy số bất kỳ: RANDBETWEEN, muốn 1 số bất kỳ có 6 chữ số bạn dùng công thức như sau:
Mã:
=RIGHT(REPT("0",6)&RANDBETWEEN(0,REPT(9,6)),6)
Tương tự bạn thay số 6 bằng 1 số khác để làm 1 số kiểu chuỗi bất kỳ. Chú ý số không được vượt quá ký tự cho phép của 1 Cell.
 
Upvote 0
Chuỗi text có 22 ký tự chuyển thành chuỗi số có 28 ký tự, cuối cùng thì bạn cần bao 1 số có bao nhiêu chữ số?
Trên bảng tính Excel số có tối đa là 15 ký tự (sai số 100 ngàn tỷ), nên số có 16 ký tự trở lên bạn phải chuyển sang Text.
Hàm lấy số bất kỳ: RANDBETWEEN, muốn 1 số bất kỳ có 6 chữ số bạn dùng công thức như sau:
Mã:
=RIGHT(REPT("0",6)&RANDBETWEEN(0,REPT(9,6)),6)
Tương tự bạn thay số 6 bằng 1 số khác để làm 1 số kiểu chuỗi bất kỳ. Chú ý số không được vượt quá ký tự cho phép của 1 Cell.

Em cảm ơn. Nhưng ý em là muốn chuyển text thành số bằng hàm (funct) ạ.
 
Upvote 0
Dạ con số đó em đánh đại để vd. Như trên e đã nói rõ "miễn sao thành chuỗi số là được" ạ

Đánh đại là sao? Phải có mối tương quan giữa kết quả với chuổi cần chuyển chứ
Nếu đánh đại thì... bạn cứ làm vậy rồi, cần gì hàm (gõ bậy bạ gì đó là xong)
 
Upvote 0
Đánh đại là sao? Phải có mối tương quan giữa kết quả với chuổi cần chuyển chứ
Nếu đánh đại thì... bạn cứ làm vậy rồi, cần gì hàm (gõ bậy bạ gì đó là xong)

Không phải bác ạ. Do e không biết cách chuyển thành số nên mới hỏi ạ, e không biết phương pháp nào để chuyển cả nên e mới nói là anh chị có thể dùng bất cứ phương pháp nào.

E đã thử dùng hàm chuyển từng kí tự sang số theo mã unicode sau đó ghép lại mà k được, e cũng dùng cách mã hoá chuỗi theo hex mà cũng k xong, các trang nước ngoài k ai có thông tin này.

E rất nghiêm túc k cố ý làm phiền lòng bác đâu ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
Không phải bác ạ. Do e không biết cách chuyển thành số nên mới hỏi ạ, e không biết phương pháp nào để chuyển cả nên e mới nói là anh chị có thể dùng bất cứ phương pháp nào.

E rất nghiêm túc k cố ý làm phiền lòng bác đâu ạ.
Bạn hỏi thế chẳng khác nào tôi hỏi "Phương pháp trị bệnh là gì?" ---> Bạn trả lời được không?
Cuối cùng bạn muốn cái gì cũng chẳng ai biết
Cho file lên đây đi rồi tính tiếp
 
Lần chỉnh sửa cuối:
Upvote 0
E đã thử dùng hàm chuyển từng kí tự sang số theo mã unicode sau đó ghép lại mà k được, e cũng dùng cách mã hoá chuỗi theo hex mà cũng k xong, các trang nước ngoài k ai có thông tin này.

Xin bác cố giúp. Thạnk rất nhiều ạ.
 
Upvote 0
E đã thử dùng hàm chuyển từng kí tự sang số theo mã unicode sau đó ghép lại mà k được, e cũng dùng cách mã hoá chuỗi theo hex mà cũng k xong, các trang nước ngoài k ai có thông tin này.

Xin bác cố giúp. Thạnk rất nhiều ạ.
Bạn thử hàm sau:

Mã:
Function strConv(MyString As String) As String
    Dim CharCode As String, i As Integer
    For i = 1 To Len(MyString)
        CharCode = CharCode & " " & Asc(Mid(MyString, i, 1))
    Next
    strConv = CharCode
   
End Function
 
Upvote 0
các trang nước ngoài k ai có thông tin này.

Nước ngoài nó không có thông tin cũng đúng. Tại vì ngay cả khi bạn viết TIẾNG VIỆT mà NGƯỜI VIỆT đọc cũng chẳng ai hiểu thì liệu bạn có tự tin rằng bạn viết tiếng Anh bọn Tây nó hiểu ý bạn không?
Nếu đúng như Hai Lúa đoán thì bài toán này phải là: MÃ HÓA CÁC KÝ TỰ THÀNH SỐ mới đúng chứ ---> Bạn hỏi chuyển Text thành số thì... bố ai biết chuyển thế nào
(Hic... bực quá đi mất)
 
Upvote 0
Bạn thử hàm sau:

Mã:
Function strConv(MyString As String) As String
    Dim CharCode As String, i As Integer
    For i = 1 To Len(MyString)
        CharCode = CharCode & " " & Asc(Mid(MyString, i, 1))
    Next
    strConv = CharCode
   
End Function


Dạ đúng rùi. Nhưng tất cả các chuối nào nó cũng ra cùng dãy số hết: 81 85 79 67 86 73 69 84 97

VD:
Chuỗi: sdjhkjhf237_fdsjkjlHHJ
Nó ra được dãy số: 81 85 79 67 86 73 69 84 97

Chuỗi: 2dfsfe333
Nó ra được dãy số: 81 85 79 67 86 73 69 84 97

Vậy là sai oỳ.
 
Upvote 0
Nước ngoài nó không có thông tin cũng đúng. Tại vì ngay cả khi bạn viết TIẾNG VIỆT mà NGƯỜI VIỆT đọc cũng chẳng ai hiểu thì liệu bạn có tự tin rằng bạn viết tiếng Anh bọn Tây nó hiểu ý bạn không?
Nếu đúng như Hai Lúa đoán thì bài toán này phải là: MÃ HÓA CÁC KÝ TỰ THÀNH SỐ mới đúng chứ ---> Bạn hỏi chuyển Text thành số thì... bố ai biết chuyển thế nào
(Hic... bực quá đi mất)


ĐÚng là ý đó đó bạn.

Nhưng đính chính chút nha, mình vào trang nước ngoài mình gõ tiếng anh để tìm, để hỏi nhé, không phải gõ tiếng việt đâu.
 
Upvote 0
Dạ đúng rùi. Nhưng tất cả các chuối nào nó cũng ra cùng dãy số hết: 81 85 79 67 86 73 69 84 97

VD:
Chuỗi: sdjhkjhf237_fdsjkjlHHJ
Nó ra được dãy số: 81 85 79 67 86 73 69 84 97

Chuỗi: 2dfsfe333
Nó ra được dãy số: 81 85 79 67 86 73 69 84 97

Vậy là sai oỳ.

Thử lại như sau:

Mã:
Function strConv(MyString As String) As String
    Dim CharCode As String, i As Integer
    Application.Volatile
    For i = 1 To Len(MyString)
        CharCode = CharCode & " " & Asc(Mid(MyString, i, 1))
    Next
    strConv = CharCode
   
End Function
 
Upvote 0
Thử lại như sau:

Mã:
Function strConv(MyString As String) As String
    Dim CharCode As String, i As Integer
     'Application.Volatile
    For i = 1 To Len(MyString)
        CharCode = CharCode & " " & Asc(Mid(MyString, i, 1))
    Next
    strConv = CharCode
   
End Function
Kết quả:

Chuỗi: sdjhkjhf237_fdsjkjlHHJ
Nó ra được dãy số: 115 100 106 104 107 106 104 102 50 51 55 95 102 100 115 106 107 106 108 72 72 74

Chuỗi: 2dfsfe333
Nó ra được dãy số: 50 100 102 115 102 101 51 51 51

Cái dòng Application.Volatile không chạy đc trên O2003 bác ạ.

ĐÚng hết rùi, cảm ơn bác nhiều thật nhiều ạ.

Nhưng có thể cho em hỏi nữa không ạ, vậy cái chuỗi số ấy có chuyển lại thành chuỗi chữ cũ được k ạ??
 
Upvote 0
Kết quả:

Chuỗi: sdjhkjhf237_fdsjkjlHHJ
Nó ra được dãy số: 115 100 106 104 107 106 104 102 50 51 55 95 102 100 115 106 107 106 108 72 72 74

Chuỗi: 2dfsfe333
Nó ra được dãy số: 50 100 102 115 102 101 51 51 51

1/. Cái dòng Application.Volatile không chạy đc trên O2003 bác ạ.

ĐÚng hết rùi, cảm ơn bác nhiều thật nhiều ạ.

Nhưng có thể cho em hỏi nữa không ạ, 2/. vậy cái chuỗi số ấy có chuyển lại thành chuỗi chữ cũ được k ạ??

1/. Chạy được chứ bạn.
2/. Bạn thử hàm sau:

Mã:
Function strConv1(MyString As String) As String
    Dim CharCode As String, i As Integer, arr As Variant
    Application.Volatile
    arr = Split(Trim(MyString), " ")
    For i = LBound(arr) To UBound(arr)
        CharCode = CharCode & Chr(arr(i))
    Next
    strConv1 = CharCode
   
End Function
 
Upvote 0
1/. Chạy được chứ bạn.
2/. Bạn thử hàm sau:

Mã:
Function strConv1(MyString As String) As String
    Dim CharCode As String, i As Integer, arr As Variant
    Application.Volatile
    arr = Split(Trim(MyString), " ")
    For i = LBound(arr) To UBound(arr)
        CharCode = CharCode & Chr(arr(i))
    Next
    strConv1 = CharCode
   
End Function

Thành thật cảm ơn bạn. Bạn quá nhiệt tình làm mình vui không biết nói sao luôn. Cảm ơn bạn !!
 
Upvote 0
Mật mã của "Hai Lúa" rất dễ để bẽ khoá

Sau đây mình xin giới thiệu mã hóa 1 mệnh đề tiếng Việt không dấu thành chuỗi các số
Nhờ có chìa khóa mật mã hẳn hoi

1./ Cách tạo chìa khóa:

Ta viết 1 hàm UDF để sắp xếp lại trật tự "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" thành 1 chuỗi theo chìa khóa ta định như bảng dưới đây

SONG TRA KHUC|=>|SONG01TRA234KHUC56BDEFI7JLMPQ8VWXYZ9
Nghia Lo|=>|NGHIA0LO1234BCDEF5JKMPQ6RSTUV7WXYZ89
Thu Bon|=>|THU012BON345ACDEF6GIJKL7MPQRS8VWXYZ9
Hoa Sen Tim|=>|HOA012SEN345TIM678BCDFG9JKLPQRUVWXYZ
Viet Nam|=>|VIET01NAM234BCDFG5HJKLO6PQRSU7WXYZ89
Phong Sa Li|=>|PHONG0SA1234LI5678BCDEF9JKMQRTUVWXYZ
BAC KINH|=>|BAC012KINH34DEFGJ5LMOPQ6RSTUV7WXYZ89

Sau khi ta có chìa khóa đó, việc còn lại là dịch 1 mệnh đề cần mã hóa theo vị trí của 1 trong những chìa khóa nêu trên. Vị trí của mỗi kí tự hay kí số đều được biểu diễn bỡi chuỗi 2 chữ số
Sau khi dịch xong, ta gởi hay thông báo cho người nhận mật mã chìa khóa giao ước nêu trên
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Thêm một hàm mã hóa ra mã ASCII. Lưu ý: chuỗi số là ký tự số chứ không phải là số nếu chuỗi quá dài.
PHP:
Function MaHoa(Str As String) As Variant
Dim i
For i = 1 To Len(Str)
    MaHoa = MaHoa & AscW(Mid(Str, i, 1))
Next
End Function
 
Upvote 0
2/ Cách dịch chiều thuận, từ mệnh đề tiếng Việt không dấu thành chuỗi số
(Nếu bạn nào cần biết hàm tạo ra các chìa khóa của bài trên, ta đến đây: http://www.giaiphapexcel.com/forum/showthread.php?54095-Giúp-Mã-hoá-chuỗi-ký-tự-thành-số-để-bảo-mật )

Sau khi ta có chìa khóa, ta dùng hàm này để mã hóa cho nhanh các đoạn văn bản:

PHP:
Function MaHoaABC0(StrC As String, ChiaKhoa As String)
 Dim J As Integer, VTr As Byte, Hg As Byte, Cot As Byte
 Dim Tmp As String, MaKhoa As String
 Const KT As String = " "
 
 StrC = UCase$(Trim(StrC)) & KT
 MaKhoa = HV6x6(ChiaKhoa)
 For J = 1 To Len(StrC)
    Tmp = Mid(StrC, J, 1)
    If Tmp <> KT Then
        VTr = InStr(MaKhoa, Tmp)
        If VTr Then
            Cot = VTr Mod 6:    If Cot = 0 Then Cot = 6
            Hg = VTr \ 6 + 1
            MaHoaABC0 = MaHoaABC0 & CStr(Hg) & CStr(Cot)
        Else
            MaHoaABC0 = MaHoaABC0 & "? "
        End If
    Else
        MaHoaABC0 = MaHoaABC0 & KT
    End If
 Next J
End Function

Cách sử dụng:

Tại 1 ô trống nào đó trên trang tính excel ta nhập cú fáp:
=MaHoaABC0(H1,"VIET NAM")
(Tại ô H1 ta đang có chuỗi cần mã hóa có nội dung "Giai Phap Excel Sang Tuoi Thu 7"& "Viet nam" là từ khóa dùng để rèn tạo ra chìa khóa)

Ta sẽ thấy hàm trả về kết quả:

35122212 51412251 1362321344 54222135 14554512 144155 66

Nếu đọc kỹ trong hàm tự tạo, ta sẽ thấy hàm không tạo ra các ký số 0; Mỗi kí tự trong mệnh đề cần mã hóa được biểu diễn bỡi 2 kí số, kí số đầu chỉ ra nhóm 6 số mà kí tự đó đang đứng & kí số sau là thứ tự của vi trí kí tự cần mã hóa đang đứng trong nhóm

Cụ thể hơn, chìa khóa 'Viet nam' có nội dung là "VIET01NAM234BCDFG5HJKLO6PQRSU7WXYZ89"
Như vậy chữ 'G' (từ đầu tiên cần mã hóa) thuộc nhóm thứ 3 & thứ tự trong nhóm là 5
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom