Cần giúp đỡ hàm tạo mã cho một chuỗi (1 người xem)

  • Thread starter Thread starter dvhieu
  • Ngày gửi Ngày gửi

Người dùng đang xem chủ đề này

dvhieu

Thành viên mới
Tham gia
15/8/12
Bài viết
1
Được thích
0
Chào các bạn.
Mình có một bảng để tham chiếu các chữ cái với số tương ứng như sau:
[TABLE="width: 483"]
[TR]
[TD]a[/TD]
[TD]b[/TD]
[TD]c[/TD]
[TD]d[/TD]
[TD]e[/TD]
[TD]f[/TD]
[TD]g[/TD]
[TD]h[/TD]
[TD]i[/TD]
[TD]k[/TD]
[TD]l[/TD]
[TD]m[/TD]
[TD]n[/TD]
[TD]o[/TD]
[TD]p[/TD]
[TD]q[/TD]
[TD]r[/TD]
[TD]s[/TD]
[TD]t[/TD]
[TD]u[/TD]
[TD]v[/TD]
[TD]x[/TD]
[TD]y[/TD]
[/TR]
[TR]
[TD]1[/TD]
[TD]2[/TD]
[TD]3[/TD]
[TD]4[/TD]
[TD]5[/TD]
[TD]6[/TD]
[TD]7[/TD]
[TD]8[/TD]
[TD]9[/TD]
[TD]10[/TD]
[TD]11[/TD]
[TD]12[/TD]
[TD]13[/TD]
[TD]14[/TD]
[TD]15[/TD]
[TD]16[/TD]
[TD]17[/TD]
[TD]18[/TD]
[TD]19[/TD]
[TD]20[/TD]
[TD]21[/TD]
[TD]22[/TD]
[TD]23[/TD]
[/TR]
[/TABLE]

Mình cần một hàm để lấy chuỗi số tương ứng với một chuỗi, gọi là hàm lấy mã:
ví dụ:
layma(a) kết quả: 1
layma(abc) - 123
layma(danh) - 41138

Mong các bạn giúp mình viét một macro như vậy.
XIn chân thành cảm ơn
 
Chưa hiểu mục đích của bạn là gì nhưng sẽ có kết quả trùng, ví dụ layma(ab) = layma(m), ... suy nghĩ trước khi áp dụng.
Về phần hàm tự tạo, bạn chỉ cần cho vòng lặp từng ký tự của chuỗi, duyệt qua dòng chứa chuỗi, lấy số tương ứng, nối chuỗi tạm gồm các số qua mỗi vòng lặp và cho hàm trả về kết quả là chuỗi tạm này khi đã duyệt xong vòng lặp.
Đưa file lên sẽ có nhiều đáp án cho bạn tham khảo.
 
Upvote 0
Thường thì dân hỏi bài ở diễn đàn này khá cẩu thả. Thứ nhất là không chịu suy nghĩ trước về vấn đề khả thi và thứ hai là đưa câu hỏi lên lỗi tùm lum. Bài của bạn bị vướng cả hai.
1. khả thi: như nếu ra ở bài #2
2. chả biết có lỗi hay không: danh sách ký tự khuyết mất vài ký tự.

Mã:
[COLOR="#008000"]' nếu đúng 100% yéu cầu của bạn là hàm này[/COLOR]
Function laymaTUMLUM(ByVal s As String) As String
Dim c As Integer
For c = 1 To Len(s)
laymaTUMLUM = laymaTUMLUM & InStr("abcdefghiklmnopqrstuvxy", Mid(s, c, 1))
Next c
End Function
'
[COLOR="#008000"]' nếu sửa lại cho mã phân biệt thì là hàm này[/COLOR]
Function laymaPHANBIET(ByVal s As String) As String
Dim c As Integer
laymaPHANBIET = Space(Len(s) * 2)
For c = 1 To Len(s)
Mid(laymaPHANBIET, c * 2 - 1, 2) = Format(InStr("abcdefghiklmnopqrstuvxy", Mid(s, c, 1)), "00")
Next c
End Function
'
[COLOR="#008000"]' nếu chuỗi mẫu của bạn chuẩn (đủ 26 ký tự) thì là hàm này[/COLOR]
Function laymaASCII(ByVal s As String) As String
Dim c As Integer
laymaASCII = Space(Len(s) * 2)
For c = 1 To Len(s)
Mid(laymaASCII, c * 2 - 1, 2) = Format(Asc(Mid(s, c, 1)) - 96, "00")
Next c
End Function
 
Upvote 0
Chắc người hỏi muốn làm bài tập về mật mã học chăng???
 
Upvote 0
Chắc người hỏi muốn làm bài tập về mật mã học chăng???

Mã phải có khả năng dịch nguợc (giải mã). Nếu đúng theo đề của chủ thớt thì không dịch ngược được. Mã hoá làm cái mốc xì gì.

Ví dụ gặp mã '119' thì dịch ngược lại là 'at' hay là 'li' ?
 
Upvote 0
Mình có kiếm được 2 code trên mạng về mã hóa và giải mã đây...Bạn nào thích thì Xài

1/ Mã Hóa Cú pháp: = mahoa()
PHP:
Public Function MaHoa(Data As String, Optional Depth As Integer) As String
Dim tempChar As String
Dim tempAsc As Integer
Dim NewData As String
Dim vChar As Integer
For vChar = 1 To Len(Data)
    tempChar = Mid$(Data, vChar, 1)
    tempAsc = Asc(tempChar)
    If Depth = 0 Then Depth = 40
    If Depth > 254 Then Depth = 254
    tempAsc = tempAsc + Depth
    If tempAsc > 255 Then tempAsc = tempAsc - 255
    tempChar = Chr(tempAsc)
   NewData = NewData & tempChar
Next vChar
MaHoa = NewData
End Function

2/ Giải Mã Cú Pháp: = giaima()
PHP:
Public Function GiaiMa(Data As String, Optional Depth As Integer) As String
Dim tempChar As String
Dim tempAsc As Integer
Dim NewData As String
Dim vChar As Integer
For vChar = 1 To Len(Data)
    tempChar = Mid$(Data, vChar, 1)
    tempAsc = Asc(tempChar)
    If Depth = 0 Then Depth = 40
    If Depth > 254 Then Depth = 254
    tempAsc = tempAsc - Depth
    If tempAsc < 0 Then tempAsc = tempAsc + 255
    tempChar = Chr(tempAsc)
    NewData = NewData & tempChar
Next vChar
GiaiMa = NewData
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
PHP:
     =kieu manh;640656

Cái này của bạn chỉ xài được trong máy tính hiện hành thôi;

Còn tất cả những điều mà các bài bên trên đề cập đã fát sinh & tồn tại 2 ngàn năm trước công nguyên rồi!

Ngày nay người ta đã tìm được những bảng khắc đá mã hóa những bản di chỉ cho đời sau bằng những hình tượng các loại đồ vật hay vật nuôi đã có từ thời ấy;

Trong vài thế kỉ trước, những cuộc chiến tranh giữa các quốc gia đã làm tăng nhanh chóng sự fát triển mã hóa các tài liệu

Có lúc người ta dùng chỉ 10 kí số để mã hóa toàn bộ đoạn văn bản; Lúc đó người ta truyền vô không gian tiếng tịt tè của 10 kí số này thôi.
Tuy fải truyền đi những đơn vị thông tin dài hơn đoạn văn bản, nhưng người điện báo viên nghe ai đó đọc ví dụ con số 5 hay con số 9 thì thuộc lòng trong đầu là nhấn thế nào lên ma nhíp rồi!.

Trước đây bạn có thấy trong các cuốn fim về đại chiến 2, khi mà các tàu thủy gởi thông tin cho nhau bằng cờ không;
Người gởi hay người nhận thông tin chỉ truyền cho nhau 5 chữ cái thôi đó nha!
Nhờ vậy mà người nhận thông tuy không cần fải xài đến giấy & bút mà vẫn nắm được nội dung thông tin được truyền 1 cách đầy đủ nhờ chìa khóa đã rất đơn giản chia nhau từ trước.

Chúc vui vẻ!
 
Upvote 0
...
Trước đây bạn có thấy trong các cuốn fim về đại chiến 2, khi mà các tàu thủy gởi thông tin cho nhau bằng cờ không;
Người gởi hay người nhận thông tin chỉ truyền cho nhau 5 chữ cái thôi đó nha!
...

Trời đất, phim mà cũng đem ra làm ví dụ. Đạo diễn nó muốn diễn gì thì diễn, ai bắt được nó phải nói sự thật đâu?
 
Upvote 0

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

Back
Top Bottom