-
code chuyển đổi Hex sang ASCII trong access
thanhtruong > 16-01-17, 05:02 PM
Chào mọi người!
Cho mình hỏi? Mình muốn quét mã QR của thẻ bảo hiểm y tế,
nhưng dùng máy quét thì nó hiện toàn là (số)
Mình tìm hiểu rồi, nhưng bên y tế họ nói phải chuyển thành mã hexa
ví dụ: 5472C6B0E1BB9D6E67205469E1BB83752068E1BB8D63204368C3AD204C696E68 thành tên NGUYỄN VĂN A chẳn hạn.
Có cách nào dùng trong access không mọi người. -
RE: code chuyển đổi Hex sang ASCII trong access
maidinhdan > 16-01-17, 09:13 PM
(16-01-17, 05:02 PM)thanhtruong Đã viết: Chào mọi người!
Cho mình hỏi? Mình muốn quét mã QR của thẻ bảo hiểm y tế,
nhưng dùng máy quét thì nó hiện toàn là (số)
Mình tìm hiểu rồi, nhưng bên y tế họ nói phải chuyển thành mã hexa
ví dụ: 5472C6B0E1BB9D6E67205469E1BB83752068E1BB8D63204368C3AD204C696E68 thành tên NGUYỄN VĂN A chẳn hạn.
Có cách nào dùng trong access không mọi người.
Đây là code bạn cần:
Mã PHP:' Procedure/ Ten thu tuc : MahoaToHex
' Author/ Nguoi khoi tao : maidinhdan@gmail.com
' Tao tren may tinh User : DANAspireV5
' Date/ Ngay tao : 1/16/2017-20:11
' Purpose/Mo ta :
'---------------------------------------------------------------------------------------
'
Public Function MahoaToHex(tString As String) As String
Dim i As Integer, S As String
S = ""
For i = 1 To Len(tString)
S = S & Right$("00" & Hex(Asc(mID$(tString, i, 1))), 2)
Next i
MahoaToHex = S
End Function
'---------------------------------------------------------------------------------------
' Procedure/ Ten thu tuc : GiaiMaFromHex
' Author/ Nguoi khoi tao : maidinhdan@gmail.com
' Tao tren may tinh User : DANAspireV5
' Date/ Ngay tao : 1/16/2017-20:11
' Purpose/Mo ta :
'---------------------------------------------------------------------------------------
'
Function GiaiMaFromHex(strHex As String) As String
Dim lngCount As Long
For lngCount = 1 To Len(strHex) Step 2
GiaiMaFromHex = GiaiMaFromHex & Chr("&h" & mID(strHex, lngCount, 2))
Next
End Function
Cách sử dụng thì như sau: lấy câu bạn hỏi mà làm:
1. Để chuyển Nguyễn Văn A thành mã Hex ta dùng cú pháp
MahoaToHex("Nguyen Van A") --> Kết quả: 4E677579656E2056616E2041
2. Để Hiển thị lại ta dùng
GiaiMaFromHex("4E677579656E2056616E2041") --> Kết quả: Nguyen Van A
* Chú ý các hàm liên quan đến mã Hex không hỗ trợ tiếng việt có dấu. -
RE: code chuyển đổi Hex sang ASCII trong access
thanhtruong > 17-01-17, 10:43 AM
nếu không chuyển thành Tiếng Việt có dấu thì cũng đâu có tác dụng gì trong trường hợp này?
Vậy có cách nào chuyển thành có dấu? -
RE: code chuyển đổi Hex sang ASCII trong access
maidinhdan > 17-01-17, 03:58 PM
(17-01-17, 10:43 AM)thanhtruong Đã viết: nếu không chuyển thành Tiếng Việt có dấu thì cũng đâu có tác dụng gì trong trường hợp này?
Vậy có cách nào chuyển thành có dấu?
Đầu tiên chú phải hiểu mã Hex dùng để làm cái gì?
Thứ 2, chú hỏi về mã hex thì tôi giúp chú trả lời về mã hex. Chứ tôi đâu biết chú dùng mã hex để làm gì? -
RE: code chuyển đổi Hex sang ASCII trong access
thanhtruong > 17-01-17, 05:07 PM
Thì mình không hiểu mã hex là gì? nhưng mình có đọc tờ báo tại đây tại đây
trong đó họ hướng dẫn thế này
Cách thức convert một chuỗi mã hexa về ký tự tiếng Việt (định dạng UTF-8):
Đối với C#:
Đối với Java:Mã:private string ConvertHexStrToUnicode(string hexString)
{
int length = hexString.Length;
byte[] bytes = new byte[length / 2];
for (int i = 0; i < length; i += 2)
{
bytes[i / 2] = Convert.ToByte(hexString.Substring(i, 2), 16);
}
return Encoding.UTF8.GetString(bytes);
}
vậy mình muốn hỏi là trong access có chuyển chuỗi mã hex về tiếng việt được hay không?Mã:String hxStr = "4E677579E1BB856E204E67E1BB8D63205068C6B0C6A16E67205468616E68";
String dest;
try {
dest = new String (DatatypeConverter.parseHexBinary(tmp) , "UTF-8");
} catch (Exception ex) {
} -
RE: code chuyển đổi Hex sang ASCII trong access
maidinhdan > 18-01-17, 12:11 AM
(17-01-17, 05:07 PM)thanhtruong Đã viết: Thì mình không hiểu mã hex là gì? nhưng mình có đọc tờ báo tại đây tại đây
trong đó họ hướng dẫn thế này
Cách thức convert một chuỗi mã hexa về ký tự tiếng Việt (định dạng UTF-8):
Đối với C#:
Đối với Java:Mã:private string ConvertHexStrToUnicode(string hexString)
{
int length = hexString.Length;
byte[] bytes = new byte[length / 2];
for (int i = 0; i < length; i += 2)
{
bytes[i / 2] = Convert.ToByte(hexString.Substring(i, 2), 16);
}
return Encoding.UTF8.GetString(bytes);
}
vậy mình muốn hỏi là trong access có chuyển chuỗi mã hex về tiếng việt được hay không?Mã:String hxStr = "4E677579E1BB856E204E67E1BB8D63205068C6B0C6A16E67205468616E68";
String dest;
try {
dest = new String (DatatypeConverter.parseHexBinary(tmp) , "UTF-8");
} catch (Exception ex) {
}
Các hàm trong thư viện Access không hỗ trợ sẳn các hàm liên quan để chuyển chuỗi mã hex về tiếng việt có dấu. Nhưng không phải là không có cách.
Theo suy nghĩ của mình Cách đó là: Bạn tự viết cho mình 4 hàm như sau:
* Từ chuỗi tiếng việt chuyển thành mã Hex.
1. Hàm Unicode chuyển chuỗi thành Ascii
2. Hàm String to Hex
* Từ mã Hex chuyển về chuỗi Tiếng việt
1. Hàm Ascii chuyển chuỗi thành Unicode
2. Hàm Hex to String
Thân mến!
Sau 10 ngày nếu bạn chưa viết được hàm này thì liên hệ lại, mình sẽ hỗ trợ. -
RE: code chuyển đổi Hex sang ASCII trong access
thanhtruong > 18-01-17, 11:15 AM
Cảm ơn vì đã chia sẻ.
Mình sẽ nghiên cứu 2 vấn đề trước khi quay lại hỏi tiếp
1: là chuyển mã Hex thành tiếng việt
2: là tách lấy dữ liệu cách nhau bởi dấu | trong access.
Chúc Anh Năm mới vui vẻ. -
RE: code chuyển đổi Hex sang ASCII trong access
thanhtruong > 11-02-17, 11:05 AM
Qua cái tết là bắt tay vào ngay,
Được sự hổ trọ từ diễn đàn mình đã từng bước hoàn thiện file tách
đúng là nhức đầu thật, tách mã cũng còn một số lỗi, mình đang cố tìm ra.
Còn về chuyển mã mình dùng cái hàm bài #2 và chuyển, nhưng bị lỗi.
Xin nhờ mọi người chỉ dẫn giúp mình. xin cảm ơn!
File demon tách chuổi và chuyển mã về tiếng việt có dấu -
RE: code chuyển đổi Hex sang ASCII trong access
maidinhdan > 11-02-17, 03:06 PM
(18-01-17, 11:15 AM)thanhtruong Đã viết: Cảm ơn vì đã chia sẻ.
Mình sẽ nghiên cứu 2 vấn đề trước khi quay lại hỏi tiếp
1: là chuyển mã Hex thành tiếng việt
2: là tách lấy dữ liệu cách nhau bởi dấu | trong access.
Chúc Anh Năm mới vui vẻ.
1. Khẳng định 1 lần nữa là không thể chuyển trực tiếp từ mã Hex sang tiếng việt có dấu được. Nó phải có hàm trung gian để chuyển đổi trước khi chuyển thành mã hex như phần trên mình có nói
Trích dẫn:Theo suy nghĩ của mình Cách đó là: Bạn tự viết cho mình 4 hàm như sau:
* Từ chuỗi tiếng việt chuyển thành mã Hex.
1. Hàm Unicode chuyển chuỗi thành Ascii
2. Hàm String to Hex
* Từ mã Hex chuyển về chuỗi Tiếng việt
1. Hàm Ascii chuyển chuỗi thành Unicode
2. Hàm Hex to String
2. Tách dữ liệu: phần này anh Ongke đã hướng dẫn bạn rồi. -
RE: code chuyển đổi Hex sang ASCII trong access
ongke0711 > 13-02-17, 10:34 PM
Tôi share với bạn code chuyển mã UTF-8 Hex thành Text như bạn đang cần. Cách xử lý của hàm này là chuyển mã UTF-8 Hex thành mã nhị phân (binary) rồi sau đó mới chuyển thành Unicode.
- Copy code sau vào module:
Mã PHP:Option Compare Database
Option Explicit
Private Declare Function CryptStringToBinary Lib "Crypt32" _
Alias "CryptStringToBinaryW" ( _
ByVal pszString As Long, _
ByVal cchString As Long, _
ByVal dwFlags As Long, _
ByVal pbBinary As Long, _
ByRef pcbBinary As Long, _
ByRef pdwSkip As Long, _
ByRef pdwFlags As Long) As Long
Private Declare Function MultiByteToWideChar Lib "kernel32" ( _
ByVal CodePage As Long, _
ByVal dwFlags As Long, _
ByVal lpMultiByteStr As Long, _
ByVal cchMultiByte As Long, _
ByVal lpWideCharStr As Long, _
ByVal cchWideChar As Long) As Long
Public Function FromHex(ByRef HexString As String) As Byte()
Const CRYPT_STRING_HEX As Long = &H4&
Dim lngOutLen As Long
Dim dwActualUsed As Long
Dim bytBinary() As Byte
If Len(HexString) < 1 Then Exit Function
'Determine output buffer length required.'
If CryptStringToBinary(StrPtr(HexString), _
Len(HexString), _
CRYPT_STRING_HEX, _
0&, _
lngOutLen, _
ByVal 0&, _
dwActualUsed) = 0 Then
Err.Raise &H80044100, "FromHex", _
"CryptStringToBinary failed, error " & CStr(Err.LastDllError)
Else
'Convert to binary.'
ReDim bytBinary(lngOutLen - 1)
If CryptStringToBinary(StrPtr(HexString), _
Len(HexString), _
CRYPT_STRING_HEX, _
VarPtr(bytBinary(0)), _
lngOutLen, _
ByVal 0&, _
dwActualUsed) = 0 Then
Err.Raise &H80044100, "FromHex", _
"CryptStringToBinary failed, error " & CStr(Err.LastDllError)
Else
FromHex = bytBinary
End If
End If
End Function
Public Function FromUtf8(ByRef Utf8() As Byte) As String
Const CP_UTF8 As Long = 65001
Dim lngBytes As Long
Dim lngResult As Long
On Error Resume Next
lngBytes = UBound(Utf8) - LBound(Utf8) + 1
If Err Then
Err.Clear
On Error GoTo 0
Err.Raise 5, "FromUtf8", "Invalid parameter: must be a dimensioned array"
End If
On Error GoTo 0
lngResult = MultiByteToWideChar(CP_UTF8, 0, VarPtr(Utf8(LBound(Utf8))), _
lngBytes, 0, 0)
FromUtf8 = String$(lngResult, 0)
MultiByteToWideChar CP_UTF8, 0, VarPtr(Utf8(LBound(Utf8))), _
lngBytes, StrPtr(FromUtf8), lngResult
End Function
- Áp dụng vào form: ví dụ textbox chứa mã Hex có Name là Text1. Textbox chứa kết quả là Text2
Mã PHP:Private Sub cmdConvert_Click()
Me.Text2 = FromUtf8(FromHex(Me.Text1))
End Sub
Link file demo (làm trên file mdb mẫu của bạn): http://www.mediafire.com/file/f9vo75tfwv...8v5%29.mdb