• code chuyển đổi Hex sang ASCII trong access
  • 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
    AuthorNguoi khoi tao maidinhdan@gmail.com
    ' Tao tren may tinh User : DANAspireV5
    DateNgay 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
    AuthorNguoi khoi tao maidinhdan@gmail.com
    ' Tao tren may tinh User : DANAspireV5
    DateNgay 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#:
    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);
           }
    Đối với Java:
    Mã:
    String hxStr = "4E677579E1BB856E204E67E1BB8D63205068C6B0C6A16E67205468616E68";
    String dest;
               try {
                           dest = new String (DatatypeConverter.parseHexBinary(tmp) , "UTF-8");
               } catch (Exception ex) {
                                                 
               }
    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?
  • 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#:
    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);
           }
    Đối với Java:
    Mã:
    String hxStr = "4E677579E1BB856E204E67E1BB8D63205068C6B0C6A16E67205468616E68";
    String dest;
               try {
                           dest = new String (DatatypeConverter.parseHexBinary(tmp) , "UTF-8");
               } catch (Exception ex) {
                                                 
               }
    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?

    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_UTF80VarPtr(Utf8(LBound(Utf8))), _
                                       lngBytes
    00)
       FromUtf8 String$(lngResult0)
       MultiByteToWideChar CP_UTF80VarPtr(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