thanhtruong > 16-01-17, 05:02 PM
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.
' 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
thanhtruong > 17-01-17, 10:43 AM
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?
thanhtruong > 17-01-17, 05:07 PM
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);
}
String hxStr = "4E677579E1BB856E204E67E1BB8D63205068C6B0C6A16E67205468616E68";
String dest;
try {
dest = new String (DatatypeConverter.parseHexBinary(tmp) , "UTF-8");
} catch (Exception ex) {
}
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) {
}
thanhtruong > 18-01-17, 11:15 AM
thanhtruong > 11-02-17, 11:05 AM
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ẻ.
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
ongke0711 > 13-02-17, 10:34 PM
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
Private Sub cmdConvert_Click()
Me.Text2 = FromUtf8(FromHex(Me.Text1))
End Sub