• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

[VB.NET] Code chuyển số thành chữ!!!

Các thủ thuật liên quan đến xử lý chuỗi và thời gian

Điều hành viên: tungcan5diop, QUANITGROBEST

Hình đại diện của người dùng
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 1641
Ngày tham gia: T.Tư 16/04/2008 11:25 am
Đến từ: Chợ Lách - Bến Tre
Been thanked: 31 time
Liên hệ:

[VB.NET] Code chuyển số thành chữ!!!

Gửi bàigửi bởi clarkkent » T.Sáu 08/05/2009 1:50 pm

Thủ thuật:
Tác giả: gửi bởi Kasper » T.Ba 11/11/2008 4:03 pm
Mô tả:


Mã: Chọn hết

  1.  
  2. Public Class DoiDonVi
  3.     Public Shared Function TienBangChu(ByVal sSoTien As String) As String
  4.         Dim DonVi() As String = {"", "nghìn ", "triệu ", "tỷ ", "nghìn ", "triệu "}
  5.         Dim so As String
  6.         Dim chuoi As String = ""
  7.         Dim temp As String
  8.         Dim id As Byte
  9.  
  10.         Do While (Not sSoTien.Equals(""))
  11.             If sSoTien.Length <> 0 Then
  12.                 so = getNum(sSoTien)
  13.                 sSoTien = Left(sSoTien, sSoTien.Length - so.Length)
  14.                 temp = setNum(so)
  15.                 so = temp
  16.                 If Not so.Equals("") Then
  17.                     temp = temp + DonVi(id)
  18.                     chuoi = temp + chuoi
  19.                 End If
  20.                 id = id + 1
  21.             End If
  22.         Loop
  23.         temp = UCase(Left(chuoi, 1))
  24.         Return temp & Right(chuoi, Len(chuoi) - 1) & "đồng."
  25.     End Function
  26.  
  27.     Private Shared Function getNum(ByVal sSoTien As String) As String
  28.         Dim so As String
  29.  
  30.         If sSoTien.Length >= 3 Then
  31.             so = Right(sSoTien, 3)
  32.         Else
  33.             so = Right(sSoTien, sSoTien.Length)
  34.         End If
  35.         Return so
  36.     End Function
  37.  
  38.     Private Shared Function setNum(ByVal sSoTien As String) As String
  39.         Dim chuoi As String = ""
  40.         Dim flag0 As Boolean
  41.         Dim flag1 As Boolean
  42.         Dim temp As String
  43.  
  44.         temp = sSoTien
  45.         Dim kyso() As String = {"không ", "một ", "hai ", "ba ", "bốn ", "năm ", "sáu ", "bảy ", "tám ", "chín "}
  46.         'Xet hang tram
  47.         If sSoTien.Length = 3 Then
  48.             If Not (Left(sSoTien, 1) = 0 And Left(Right(sSoTien, 2), 1) = 0 And Right(sSoTien, 1) = 0) Then
  49.                 chuoi = kyso(Left(sSoTien, 1)) + "trăm "
  50.             End If
  51.             sSoTien = Right(sSoTien, 2)
  52.         End If
  53.         'Xet hang chuc
  54.         If sSoTien.Length = 2 Then
  55.             If Left(sSoTien, 1) = 0 Then
  56.                 If Right(sSoTien, 1) <> 0 Then
  57.                     chuoi = chuoi + "linh "
  58.                 End If
  59.                 flag0 = True
  60.             Else
  61.                 If Left(sSoTien, 1) = 1 Then
  62.                     chuoi = chuoi + "mười "
  63.                 Else
  64.                     chuoi = chuoi + kyso(Left(sSoTien, 1)) + "mươi "
  65.                     flag1 = True
  66.                 End If
  67.             End If
  68.             sSoTien = Right(sSoTien, 1)
  69.         End If
  70.         'Xet hang don vi
  71.         If Right(sSoTien, 1) <> 0 Then
  72.             If Left(sSoTien, 1) = 5 And Not flag0 Then
  73.                 If temp.Length = 1 Then
  74.                     chuoi = chuoi + "năm "
  75.                 Else
  76.                     chuoi = chuoi + "lăm "
  77.                 End If
  78.             Else
  79.                 If Left(sSoTien, 1) = 1 And Not (Not flag1 Or flag0) And chuoi <> "" Then
  80.                     chuoi = chuoi + "mốt "
  81.                 Else
  82.                     chuoi = chuoi + kyso(Left(sSoTien, 1)) + ""
  83.                 End If
  84.             End If
  85.         Else
  86.         End If
  87.         Return chuoi
  88.     End Function
  89. End Class
  90.  


• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

Hình đại diện của người dùng
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 1641
Ngày tham gia: T.Tư 16/04/2008 11:25 am
Đến từ: Chợ Lách - Bến Tre
Been thanked: 31 time
Liên hệ:

Re: [VB.NET] Code chuyển số thành chữ!!!

Gửi bàigửi bởi clarkkent » T.Sáu 08/05/2009 1:51 pm

Thủ thuật:
Tác giả: gửi bởi hoangthu1974 » T.Tư 12/11/2008 9:09 am
Mô tả:


Mã: Chọn hết

  1.    '------------------------------------------------------------------
  2.     ' Function Name: Num2Text
  3.     ' Description  : Change the numeric to text speech
  4.     ' Author       : Hoang Thu
  5.     ' Date Create  : 23/12/2007
  6.     '------------------------------------------------------------------
  7.     Function Num2Text(ByVal s As String, Optional ByVal Local As Boolean = False) As String
  8.         'Optional ByVal Local As Boolean = False 'Nam Kỳ Reading
  9.         'Optional ByVal Local As Boolean = True 'Bắc Kỳ Reading
  10.         Dim DS As Char = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator
  11.         Dim GS As Char = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberGroupSeparator
  12.         Dim fDS As Boolean = False
  13.         Dim fDecAdd As Boolean = False
  14.         Dim so() As String = {"không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín"}
  15.         Dim hang() As String = {"", "ngàn", "triệu", "tỷ"}
  16.         If Local Then
  17.             hang(1) = "nghìn"
  18.         End If
  19.         Dim i, j, cntDS, donvi, chuc, tram As Integer
  20.         Dim str As String
  21.         str = ""
  22.         s = s.Replace(GS, "")
  23.         If s.Substring(s.Length - 1, 1) = DS Then s = s.Substring(0, s.Length - 1)
  24.  
  25.         i = s.Length
  26.         While s.Substring(0, 1) = "0"
  27.             s = s.Substring(1, s.Length - 1)
  28.         End While
  29.         If s.Substring(0, 1) = DS Then s = "0" & s
  30.         cntDS = 0
  31.         If InStr(s, DS) Then
  32.             For i = 0 To s.Length - 1 Step 1
  33.                 If s.Substring(i, 1) = DS Then
  34.                     cntDS += 1
  35.                 End If
  36.             Next
  37.         End If
  38.         If cntDS > 1 Then Return ""
  39.         If cntDS > 0 Then
  40.             While s.Substring(s.Length - 1, 1) = "0"
  41.                 s = s.Substring(0, s.Length - 1)
  42.             End While
  43.         End If
  44.         If s.Substring(s.Length - 1, 1) = DS Then s = s.Substring(0, s.Length - 1)
  45.  
  46.         i = s.Length - 1
  47.         If i = 0 Then
  48.             str = ""
  49.         Else
  50.             j = 0
  51.             Do While i >= 0
  52.                 If s.Substring(i, 1) = DS Then
  53.                     fDS = True
  54.                     i -= 1
  55.                     GoTo DecimalAdd
  56.                 Else
  57.                     donvi = Int(s.Substring(i, 1))
  58.                     i -= 1
  59.                 End If
  60.  
  61.                 If i > -1 Then
  62.                     If s.Substring(i, 1) = DS Then
  63.                         i -= 1
  64.                         chuc = -1
  65.                         tram = -1
  66.                         fDS = True
  67.                         GoTo NumberRead
  68.                     Else
  69.                         chuc = Int(s.Substring(i, 1))
  70.                     End If
  71.                 Else
  72.                     chuc = -1
  73.                 End If
  74.                 i -= 1
  75.  
  76.                 If i > -1 Then
  77.                     If s.Substring(i, 1) = DS Then
  78.                         i -= 1
  79.                         tram = -1
  80.                         fDS = True
  81.                         GoTo NumberRead
  82.                     Else
  83.                         tram = Int(s.Substring(i, 1))
  84.                     End If
  85.                 Else
  86.                     tram = -1
  87.                 End If
  88.                 i -= 1
  89. NumberRead:
  90.                 If donvi > 0 Or chuc > 0 Or tram > 0 Or j = 3 Then str = hang(j) & " " & str
  91.                 j += 1
  92.  
  93.                 If j > 3 Then j = 1
  94.  
  95.                 If donvi = 1 And chuc > 1 Then
  96.                     str = "mốt" & " " & str
  97.                 ElseIf donvi = 4 And chuc > 1 Then
  98.                     If Local Then
  99.                         str = "tư" & " " & str
  100.                     Else
  101.                         str = so(donvi) & " " & str
  102.                     End If
  103.                 ElseIf donvi = 5 Then
  104.                     If chuc > 0 Then
  105.                         str = "lăm" & " " & str
  106.                     Else
  107.                         str = so(donvi) & " " & str
  108.                     End If
  109.                 Else
  110.                     If donvi <> 0 Then str = so(donvi) & " " & str
  111.                 End If
  112.  
  113.                 If chuc < 0 Then
  114.                     If Not fDS Then Exit Do
  115.                 Else
  116.                     If chuc = 0 And donvi > 0 Then
  117.                         str = "lẻ" & " " & str
  118.                     ElseIf chuc = 1 Then
  119.                         str = "mười" & " " & str
  120.                     ElseIf chuc > 1 Then
  121.                         str = so(chuc) & " " & "mươi" & " " & str
  122.                     End If
  123.                 End If
  124.                 If tram < 0 Then
  125.                     If Not fDS Then Exit Do
  126.                 Else
  127.                     If tram > 0 Or chuc > 0 Or donvi > 0 Then
  128.                         str = so(tram) & " " & "trăm" & " " & str
  129.                     End If
  130.                 End If
  131. DecimalAdd:
  132.                 If fDS Then
  133.                     str = "phảy " & str
  134.                     j = 0
  135.                     fDS = False
  136.                     fDecAdd = True
  137.                 End If
  138.             Loop
  139.         End If
  140.  
  141.         If str.Length > 0 Then
  142.             str = str.Trim
  143.             str = str.Replace("  ", " ")
  144.             str = UCase(str.Substring(0, 1)) & str.Substring(1, str.Length - 1)
  145.             Return str
  146.         Else
  147.             Return ""
  148.         End If
  149.     End Function
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

Hình đại diện của người dùng
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 1641
Ngày tham gia: T.Tư 16/04/2008 11:25 am
Đến từ: Chợ Lách - Bến Tre
Been thanked: 31 time
Liên hệ:

Re: [VB.NET] Code chuyển số thành chữ!!!

Gửi bàigửi bởi clarkkent » T.Sáu 08/05/2009 2:04 pm

Thủ thuật:
Tác giả: gửi bởi thanhbinhna vào ngày Chủ nhật 20/05/2007 3:09 pm
Mô tả:


khá sơ sài nhưng gọn, chuyển từ VB6

Mã: Chọn hết

  1.    Public Function Tienchu(ByVal sotien As Double) As String
  2.         Dim tien(4) As String
  3.         Dim chu, tmpchuoi, bakytu As String
  4.         Dim i As Integer
  5.         tien(0) = " tỷ"
  6.         tien(1) = " triệu"
  7.         tien(2) = " nghìn"
  8.         tien(3) = "đồng"
  9.         chu = ""
  10.         If sotien < 0 Then
  11.             chu = chu & " Tru"
  12.         End If
  13.         tmpchuoi = Microsoft.VisualBasic.Right(Space(12) & CStr(sotien), 12)
  14.         For i = 1 To 4
  15.             bakytu = Trim(Mid(tmpchuoi, i * 3 - 2, 3))
  16.             If bakytu <> "" Then
  17.                 chu = chu & doisochu(CInt(bakytu))
  18.                 chu = chu & tien(i - 1) & ""
  19.             End If
  20.         Next
  21.         If chu = "đồng" Then
  22.             chu = "Không đồng"
  23.         End If
  24.         Tienchu = chu
  25.     End Function
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

Hình đại diện của người dùng
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 1641
Ngày tham gia: T.Tư 16/04/2008 11:25 am
Đến từ: Chợ Lách - Bến Tre
Been thanked: 31 time
Liên hệ:

Re: [VB.NET] Code chuyển số thành chữ!!!

Gửi bàigửi bởi clarkkent » T.Sáu 08/05/2009 2:08 pm

Thủ thuật:
Tác giả: gửi bởi anhlt vào ngày Thứ 2 25/06/2007 5:39 pm
Mô tả:


code này dài ghê :))

Mã: Chọn hết

  1.    Function num2Text(ByVal str1 As String) As String
  2.         Dim str As String
  3.         Dim i As Integer
  4.         Dim tg As String
  5.         Dim j As Integer
  6.         Dim sval As Integer
  7.         Dim sSo As String
  8.         Dim sNum2Text As String
  9.         Dim k As Integer
  10.         Dim l As Integer
  11.         str = str1
  12.         i = len(str)
  13.         k = i \ 3
  14.         l = 0
  15.         Do While l <= k
  16.             If l < k Then
  17.                 tg = mid(str, i - (l + 1) * 3 + 1, 3)
  18.             Else
  19.                 tg = Microsoft.VisualBasic.Left(str, i - l * 3)
  20.             End If
  21.             sSo = ""
  22.             For j = 1 To len(tg)
  23.                 sval = val(mid(tg, len(tg) - j + 1, 1))
  24.                 Select Case sval
  25.                     Case 0
  26.                         Select Case j
  27.                             Case 3
  28.                                 If val(tg) > 0 Then
  29.                                     sSo = "không trăm " & sso
  30.                                 End If
  31.                             Case 2
  32.                                 If val(mid(tg, 3, 1)) > 0 Then
  33.                                     sSo = "linh " & sso
  34.                                 End If
  35.                             Case 1
  36.  
  37.                         End Select
  38.                     Case 1
  39.                         Select Case j
  40.                             Case 3
  41.                                 sSo = "một trăm " & sso
  42.                             Case 2
  43.                                 sSo = "mười " & sso
  44.                             Case 1
  45.                                 If len(tg) > 1 And val(mid(tg, 2, 1)) > 1 Then
  46.                                     sSo = "mốt" & sso
  47.                                 Else
  48.                                     sSo = "một" & sso
  49.                                 End If
  50.                         End Select
  51.                     Case 2
  52.                         Select Case j
  53.                             Case 3
  54.                                 sSo = "hai trăm " & sso
  55.                             Case 2
  56.                                 sSo = "hai mươi " & sso
  57.                             Case 1
  58.                                 sSo = "hai" & sso
  59.                         End Select
  60.                     Case 3
  61.                         Select Case j
  62.                             Case 3
  63.                                 sSo = "ba trăm " & sso
  64.                             Case 2
  65.                                 sSo = "ba mươi " & sso
  66.                             Case 1
  67.                                 sSo = "ba" & sso
  68.                         End Select
  69.                     Case 4
  70.                         Select Case j
  71.                             Case 3
  72.                                 sSo = "bốn trăm " & sso
  73.                             Case 2
  74.                                 sSo = "bốn mươi " & sso
  75.                             Case 1
  76.                                 sSo = "bốn" & sso
  77.                         End Select
  78.                     Case 5
  79.                         Select Case j
  80.                             Case 3
  81.                                 sSo = "năm trăm " & sso
  82.                             Case 2
  83.                                 sSo = "năm mươi " & sso
  84.                             Case 1
  85.                                 If len(tg) > 1 And val(mid(tg, 2, 1)) >= 1 Then
  86.                                     sSo = "lăm " & sso
  87.                                 Else
  88.                                     sSo = "năm " & sso
  89.                                 End If
  90.                         End Select
  91.                     Case 6
  92.                         Select Case j
  93.                             Case 3
  94.                                 sSo = "sáu trăm " & sso
  95.                             Case 2
  96.                                 sSo = "sáu mươi " & sso
  97.                             Case 1
  98.                                 sSo = "sáu" & sso
  99.                         End Select
  100.                     Case 7
  101.                         Select Case j
  102.                             Case 3
  103.                                 sSo = "bảy trăm " & sso
  104.                             Case 2
  105.                                 sSo = "bảy mươi " & sso
  106.                             Case 1
  107.                                 sSo = "bảy" & sso
  108.                         End Select
  109.                     Case 8
  110.                         Select Case j
  111.                             Case 3
  112.                                 sSo = "tám trăm " & sso
  113.                             Case 2
  114.                                 sSo = "tám mươi " & sso
  115.                             Case 1
  116.                                 sSo = "tám" & sso
  117.                         End Select
  118.                     Case 9
  119.                         Select Case j
  120.                             Case 3
  121.                                 sSo = "chín trăm " & sso
  122.                             Case 2
  123.                                 sSo = "chín mươi " & sso
  124.                             Case 1
  125.                                 sSo = "chín" & sso
  126.                         End Select
  127.                 End Select
  128.             Next
  129.             Select Case l
  130.                 Case 1, 4
  131.                     If sso <> "" Then
  132.                         snum2text = sso & " nghìn" & " " & snum2text
  133.                     End If
  134.                 Case 2, 5
  135.                     If sso <> "" Then
  136.                         snum2text = sso & " triệu" & " " & snum2text
  137.                     End If
  138.                 Case 3, 6
  139.                     If sso <> "" Then
  140.                         snum2text = sso & " tỷ" & " " & snum2text
  141.                     End If
  142.                 Case Else
  143.                     snum2text = sso
  144.             End Select
  145.             l = l + 1
  146.         Loop
  147.         num2Text = snum2text
  148.     End Function
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

Hình đại diện của người dùng
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 1641
Ngày tham gia: T.Tư 16/04/2008 11:25 am
Đến từ: Chợ Lách - Bến Tre
Been thanked: 31 time
Liên hệ:

Re: [VB.NET] Code chuyển số thành chữ!!!

Gửi bàigửi bởi clarkkent » T.Sáu 08/05/2009 2:13 pm

Thủ thuật:
Tác giả: gửi bởi PhamTienSinh vào ngày Thứ 4 18/07/2007 3:06 pm
Mô tả:


Mã: Chọn hết

  1.   Public Class NumBer2TextBase
  2.         Private strDigit As String() = {"không ", "một ", "hai ", "ba ", "bốn ", "năm ", _
  3.          "sáu ", "bảy ", "tám ", "chín "}
  4.         Private strGroup As String() = {"nghìn ", "triệu ", "tỷ "}
  5.  
  6.         Public Function Transtalte(ByVal iNum As String) As String
  7.             Try
  8.                 Dim iG As Short
  9.                 Dim k As Byte = 0
  10.                 Dim st As String, s As String = ""
  11.                 For i As Short = CShort((iNum.Length - 6)) To iNum.Length Mod 3 Step -3
  12.                     iG = Short.Parse(iNum.Substring(i, 3))
  13.                     st = Group3(iG)
  14.                     If st <> "" Then
  15.                         st += strGroup(k)
  16.                     ElseIf k Mod 3 = 2 Then
  17.                         st = strGroup(k)
  18.                     End If
  19.                     k = CByte(((k + 1) Mod 3))
  20.                     s = st + s
  21.                 Next
  22.                 If iNum.Length Mod 3 <> 0 AndAlso iNum.Length > 3 Then
  23.                     iG = Short.Parse(iNum.Substring(0, iNum.Length Mod 3))
  24.                     st = Group3(iG)
  25.                     st += strGroup(k)
  26.                     s = st + s
  27.                 End If
  28.                 s = s + Group3(Short.Parse(iNum.Substring(Math.Max(iNum.Length - 3, 0))))
  29.                 If s = "" Then
  30.                     s = "không"
  31.                 ElseIf s.Substring(0, 13) = "không trăm lẻ" Then
  32.                     s = s.Substring(14)
  33.                 ElseIf s.Substring(0, 11) = "không trăm " Then
  34.                     s = s.Substring(11)
  35.                 End If
  36.                 Return s
  37.             Catch ex As Exception
  38.                 Return Nothing
  39.             End Try
  40.         End Function
  41.  
  42.         Private Function Group3(ByVal iNum As Short) As String
  43.             Dim iDg As Byte() = New Byte(2) {}
  44.             Dim sResult As String() = New String(2) {}
  45.             If iNum = 0 Then
  46.                 Return ""
  47.             End If
  48.  
  49.             iDg(2) = CByte((iNum / 100))
  50.             iDg(1) = CByte(((iNum / 10) Mod 10))
  51.             iDg(0) = CByte((iNum Mod 10))
  52.  
  53.             sResult(2) = strDigit(iDg(2)) + "trăm "
  54.             If iDg(1) >= 2 Then
  55.                 sResult(1) = strDigit(iDg(1)) + "mươi "
  56.             ElseIf iDg(1) = 1 Then
  57.                 sResult(1) = "mười "
  58.             ElseIf iDg(1) = 0 Then
  59.                 sResult(1) = "lẻ "
  60.             End If
  61.  
  62.             sResult(0) = strDigit(iDg(0))
  63.  
  64.             If iDg(0) = 0 Then
  65.                 sResult(0) = ""
  66.                 If iDg(1) = 0 Then
  67.                     sResult(1) = ""
  68.                 End If
  69.             ElseIf iDg(0) = 1 AndAlso iDg(1) >= 2 Then
  70.                 sResult(0) = "mốt "
  71.             ElseIf iDg(0) = 5 AndAlso iDg(1) >= 1 Then
  72.                 sResult(0) = "lăm "
  73.             End If
  74.  
  75.             Return sResult(2) + sResult(1) + sResult(0)
  76.         End Function
  77.         Public Shared Function Translate(ByVal Number As String) As String
  78.             Dim N2T As New NumBer2TextBase
  79.             Return N2T.Transtalte(Number)
  80.         End Function
  81.  
  82.     End Class
  83.    

sử dụng

Mã: Chọn hết

  1. MsgBox(NumBer2TextBase.Translate("10000000000000000000000"))

hoặc

Mã: Chọn hết

  1. Dim n2t As New NumBer2TextBase
  2.  MsgBox(n2t.Transtalte("123"))
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

Hình đại diện của người dùng
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 1641
Ngày tham gia: T.Tư 16/04/2008 11:25 am
Đến từ: Chợ Lách - Bến Tre
Been thanked: 31 time
Liên hệ:

Re: [VB.NET] Code chuyển số thành chữ!!!

Gửi bàigửi bởi clarkkent » T.Sáu 08/05/2009 2:14 pm

Thủ thuật:
Tác giả: gửi bởi ALTERMIGHTY vào ngày Thứ 4 18/07/2007 3:28 pm
Mô tả:


Mã: Chọn hết

  1. Imports System.Math
  2. Public Class DocChuoiSo
  3.  
  4.     Private Function DocCumBa(ByVal nd As String) As String
  5.         Dim so() As String = {"không ", "một ", "hai ", "ba ", "bốn ", "năm ", "sáu ", "bảy ", "tám ", "chín "}
  6.         Dim kq As String = ""
  7.         Select Case Len(nd)
  8.             Case 1 : Return so(CInt(nd))
  9.             Case 2
  10.                 Select Case nd(0)
  11.                     Case "1" : kq &= "mười "
  12.                     Case "0" : If nd.Chars(1) <> "0" Then kq &= "lẻ "
  13.                     Case Else : kq &= so(CInt(Left(nd, 1))) & "mươi "
  14.                 End Select
  15.                 Select Case nd(1)
  16.                     Case "5" : If nd(0) = "0" Then kq &= "năm " Else kq &= "lăm "
  17.                     Case "0"
  18.                     Case "1" : If nd(0) = "1" Then kq &= "một " Else kq &= "mốt "
  19.                     Case Else : kq &= so(CInt(nd(1).ToString))
  20.                 End Select
  21.             Case 3 : If nd <> "000" Then kq = so(CInt(Left(nd, 1))) & "trăm " & DocCumBa(Right(nd, 2))
  22.         End Select
  23.         Return kq
  24.     End Function
  25.  
  26.     Public Function DocSo(ByVal nd As String, Optional ByVal dauthapphan As Char = ".") As String
  27.         Dim kq As String = ""
  28.         If Left(nd, 1) = "-" Then
  29.             kq &= "âm "
  30.             nd = nd.Remove(0, 1)
  31.         End If
  32.         If nd.Length <= 3 Then Return kq & DocCumBa(nd)
  33.         Dim hang() As String = {"", "ngàn ", "triệu ", "tỷ ", "tỷ "}, k As Integer = 0
  34.         Dim phandoc() As String = Split(nd, CStr(dauthapphan))
  35.         Dim phanduong As String = ""
  36.         If UBound(phandoc) = 0 Then
  37.             For i As Integer = nd.Length - 3 To -2 Step -3
  38.                 Dim cumso As String = DocCumBa(nd.Substring(Max(i, 0), Min(3, 3 + i)))
  39.                 If cumso <> "" Or k = 3 Then phanduong = cumso & hang(k) & phanduong
  40.                 If k < 3 Then k += 1 Else k = 1
  41.             Next
  42.         Else : phanduong = DocSo(phandoc(0)) & "phẩy " & DocSo(phandoc(1))
  43.         End If
  44.         Return kq & phanduong
  45.     End Function
  46.  
  47. End Class
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

Hình đại diện của người dùng
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 1641
Ngày tham gia: T.Tư 16/04/2008 11:25 am
Đến từ: Chợ Lách - Bến Tre
Been thanked: 31 time
Liên hệ:

Re: [VB.NET] Code chuyển số thành chữ!!!

Gửi bàigửi bởi clarkkent » T.Sáu 08/05/2009 2:17 pm

Thủ thuật:
Tác giả: gửi bởi honamhai vào ngày Thứ 7 21/07/2007 8:18 am
Mô tả:


code này còn hạn chế

Mã: Chọn hết

  1.    Public Function VND(ByVal Baonhieu As Double) As String
  2.         Dim KetQua, SoTien As String
  3.         Dim nhom, chu As String
  4.         Dim dich, s1 As String
  5.         Dim s2, s3 As String
  6.         Dim i, j As Byte
  7.         Dim Vitri As Byte
  8.         Dim s As Double
  9.         Dim hang() As String = {"Không", "trăm", "mười", "gì đó"}
  10.         Dim doc() As String = {"Không", "tỷ", "triệu", "ngàn", "đồng", "xu"}
  11.         Dim dem() As String = {"Không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín"}
  12.         On Error Resume Next
  13.         If Baonhieu = 0 Then
  14.             KetQua = "Không đồng"
  15.         Else
  16.             If System.Math.Abs(Baonhieu) > 999999999999.99 Then
  17.                 KetQua = "Số quá lớn"
  18.             Else
  19.                 If Baonhieu < 0 Then
  20.                     KetQua = "Trừ" & Space(1)
  21.                 Else
  22.                     KetQua = Space(0)
  23.                 End If
  24.                 SoTien = Format(System.Math.Abs(Baonhieu), "###########0.00")
  25.                 SoTien = Microsoft.VisualBasic.Right(Space(12) & SoTien, 15)
  26.                 For i = 1 To 5
  27.                     nhom = Mid(SoTien, i * 3 - 2, 3)
  28.                     If nhom <> Space(3) Then
  29.                         Select Case nhom
  30.                             Case "000"
  31.                                 If i = 4 Then
  32.                                     chu = "đồng" & Space(1)
  33.                                 Else
  34.                                     chu = Space(0)
  35.                                 End If
  36.                             Case ".00", ",00"
  37.                                 chu = "chẵn"
  38.                             Case Else
  39.                                 s1 = Microsoft.VisualBasic.Left(nhom, 1)
  40.                                 s2 = Mid(nhom, 2, 1)
  41.                                 s3 = Microsoft.VisualBasic.Right(nhom, 1)
  42.                                 chu = Space(0)
  43.                                 hang(3) = doc(i)
  44.                                 For j = 1 To 3
  45.                                     dich = Space(0)
  46.                                     s = Val(Mid(nhom, j, 1))
  47.                                     If s > 0 Then
  48.                                         dich = dem(s) & Space(1) & hang(j) & Space(1)
  49.                                     End If
  50.                                     Select Case j
  51.                                         Case 2 And s = 1
  52.                                             dich = "mươi" & Space(1)
  53.                                         Case 3 And s = 0 And nhom <> Space(2) & "0"
  54.                                             dich = hang(j) & Space(1)
  55.                                         Case 3 And s = 5 And s2 <> Space(1) And s2 <> "0"
  56.                                             dich = "l" & Mid(dich, 2)
  57.                                         Case 2 And s = 0 And s3 <> "0"
  58.                                             If (s1 >= "1" And s1 <= "9") Or (s1 = "0" And i = 4) Then
  59.                                                 dich = "lẻ" & Space(1)
  60.                                             End If
  61.                                     End Select
  62.                                     chu = chu & dich
  63.                                 Next j
  64.                         End Select
  65.                         Vitri = InStr(1, chu, "mươi một", CompareMethod.Text)
  66.                         If Vitri > 0 Then Mid(chu, Vitri, 9) = "mươi mốt"
  67.                         KetQua = KetQua & chu
  68.                     End If
  69.                 Next i
  70.             End If
  71.         End If
  72.         VND = UCase(Microsoft.VisualBasic.Left(KetQua, 1)) & Mid(KetQua, 2)
  73.     End Function
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

Hình đại diện của người dùng
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 1641
Ngày tham gia: T.Tư 16/04/2008 11:25 am
Đến từ: Chợ Lách - Bến Tre
Been thanked: 31 time
Liên hệ:

Re: [VB.NET] Code chuyển số thành chữ!!!

Gửi bàigửi bởi clarkkent » T.Sáu 08/05/2009 2:18 pm

Thủ thuật:
Tác giả: gửi bởi cobecauvong vào ngày Thứ 3 28/08/2007 10:55 am
Mô tả:


cái này bên C#

Mã: Chọn hết

  1. using System;
  2. namespace Num2String
  3. {
  4.    /// <summary>
  5.    /// Summary description for Num2Str.
  6.    /// </summary>
  7.    public class Num2Str
  8.    {
  9.       public Num2Str()
  10.       {
  11.          //
  12.          // TODO: Add constructor logic here
  13.          //
  14.       }
  15.       // Hàm này có thực hiện cắt các số 0
  16.       // ví dụ 005 sẽ đọc là không trăm linh năm
  17.       private string Group32StrX(string num)
  18.       {  
  19.          string[] No = {"không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín"};
  20.          string kq, tram, chuc, donvi;
  21.          // Trăm
  22.          if(num.Substring(0, 1) == "0")
  23.          { tram = "";}
  24.          else
  25.          { tram = No[Convert.ToByte(num.Substring(0,1))] + " trăm "; }
  26.          // Chục
  27.          switch (num.Substring(1, 1))
  28.          {
  29.             case "0":if (num.Substring(2,1) != "0" && num.Substring(0,1) != "0")
  30.                    {
  31.                       chuc = "linh "; }
  32.                    else { chuc  = ""; } ; break;
  33.             case "1":chuc = "mười " ;break;
  34.             default:
  35.                chuc = No[Convert.ToByte(num.Substring(1,1))] + " mươi "; break;
  36.          }      
  37.          // Đơn vị
  38.          switch (num.Substring(2, 1))
  39.          {
  40.             case "0": donvi = "" ; break;
  41.             case "1": if ((num.Substring(1,1) == "0") || (num.Substring(1,1) == "1"))
  42.                     {
  43.                        donvi = "một";
  44.                     }
  45.                     else
  46.                     {
  47.                        donvi = "mốt";
  48.                     }; break;
  49.             case "5":
  50.                if (num.Substring(1,1) != "0")
  51.                {
  52.                   donvi = "lăm";
  53.                }
  54.                else
  55.                {
  56.                   donvi = "năm";
  57.                };break;
  58.             default:
  59.                donvi = No[Convert.ToByte(num.Substring(2,1))]; break;
  60.          }      
  61.          kq = tram + chuc + donvi;
  62.          return kq;
  63.       }
  64.  
  65.       private string IntNum2Str(string num)
  66.       {
  67.          string[] Cap = {"", " nghìn ", " triệu ", " tỷ ", " nghìn tỷ ", " triệu tỷ ", " tỷ tỷ ", " nghìn tỷ tỷ "};
  68.          string kq = "" , str = num, g3, kqtg;
  69.          int caps = 0;
  70.          while(str.Length > 3)
  71.          {
  72.             g3 = str.Substring(str.Length - 3,3);
  73.             str = str.Substring(0, str.Length - 3);
  74.             if (g3!="000")
  75.             { kqtg =  Group32StrX(g3)+ Cap[Convert.ToByte(caps)];}
  76.             else{ kqtg = "";}
  77.             kq = kqtg + kq;
  78.             caps++;
  79.          }
  80.          //Chuẩn bị trước khi sử dụng hàm Group32Str1
  81.          while (str.Length <3 )
  82.          { str = "0" + str; }
  83.          
  84.          if ((str == "000") && (num.Length <=3))
  85.          { kqtg = "không"; }
  86.          else
  87.          { kqtg = Group32StrX(str) + Cap[Convert.ToByte(caps)]; }
  88.          kq = kqtg + kq;
  89.          return kq;
  90.       }
  91.  
  92.       private string FracNum2Str(string num)
  93.       {
  94.          string[] No = {"không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín"};
  95.          string kq ="";
  96.          for (int i=0; i<num.Length; i++)
  97.          {
  98.             kq += No[Convert.ToByte(num.Substring(i,1))] + " ";
  99.          }
  100.          return kq;
  101.       }
  102.  
  103.       private string No2Str(string num)
  104.       {
  105.          string intstr, fracstr, am;
  106.          // Xử lý khi là số âm
  107.          if (num.Substring(0,1) == "-")
  108.          {
  109.             am ="âm ";
  110.             num = num.Replace("-", "");
  111.          }
  112.          else {am = "";}
  113.      
  114.          string[] str = num.Split('.');
  115.          // Số quá lớn nhiều hơn 27 chữ số
  116.          if (str[0].Length > 28)
  117.             throw new Exception("Số lớn quá không hiển thị được! ");
  118.  
  119.          string s;      
  120.          // Xử lý phần số, nếu là có số thập phân hoặc không
  121.          if (str.Length == 2)
  122.          {
  123.             intstr = IntNum2Str(str[0]);
  124.             if (str[1].Length <=2)
  125.             {
  126.                if (str[1].Substring(0,1) == "0")
  127.                {
  128.                   fracstr = FracNum2Str(str[1]);
  129.                }
  130.                else
  131.                {
  132.                   fracstr = IntNum2Str(str[1]);
  133.                }
  134.             }
  135.             else
  136.             {
  137.                fracstr = FracNum2Str(str[1]);
  138.             }
  139.             s = (intstr + " phảy " + fracstr);
  140.          }
  141.          else
  142.          {
  143.             intstr = IntNum2Str(str[0]);
  144.             s = intstr;
  145.          }
  146.          s = am + s;
  147.          string chuhoa = s.Substring(0,1).ToUpper();
  148.          s = s.Substring(1, s.Length-1);
  149.          return (chuhoa + s);
  150.       }
  151.  
  152.       public string NumNormalize(string num)
  153.       {
  154.          char ThousandSpace = ',';
  155.          char PointScape = '.';
  156.          string[] s = num.Split('.');
  157.          string g3, str = "";
  158.          while(s[0].Length > 3)
  159.          {
  160.             g3 = s[0].Substring(s[0].Length - 3,3);
  161.             s[0] = s[0].Substring(0, s[0].Length - 3);
  162.             str = ThousandSpace + g3 + str;
  163.          }
  164.          str = s[0] + str;
  165.          if (s.Length == 2)
  166.          {
  167.             str = (str + PointScape + s[1]);
  168.          }
  169.          return str.Replace("-,", "-");
  170.       }
  171.  
  172.       public string NumberToString(string no)
  173.       {
  174.          // xử lý trường hợp dáu phảy thay cho dấu chấm
  175.          if (no.IndexOf(",", 0, 1) != 0) {no = no.Replace(",", ".");}
  176.          // Xoá các ký tự trắng ở đầu và cuối
  177.          no = no.Trim();
  178.          // Xử lý khi nó là chữ chứ không phải là số
  179.          if (no == "0") return "không";
  180.          if (no == "") return "không";
  181.          double val;
  182.          try
  183.          {
  184.             val = Convert.ToDouble(no);
  185.          }
  186.          catch
  187.          {
  188.             throw new Exception("Đây không phải là số");
  189.          }
  190.          // tiêu diệt các số không
  191.          while (no.Substring(0, 1) == "0")
  192.          {
  193.             no = no.Substring(1, no.Length-1);
  194.          }
  195.  
  196.          if (no.IndexOf(".", 0, 1) != -1)
  197.          {
  198.             while (no.Substring(no.Length-1, 1) == "0")
  199.             {
  200.                no = no.Substring(0, no.Length-1);
  201.             }
  202.          }
  203.          no = No2Str(no);
  204.  
  205.          return no;
  206.       }
  207.    }
  208. }
  209.  
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

Hình đại diện của người dùng
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 1641
Ngày tham gia: T.Tư 16/04/2008 11:25 am
Đến từ: Chợ Lách - Bến Tre
Been thanked: 31 time
Liên hệ:

Re: [VB.NET] Code chuyển số thành chữ!!!

Gửi bàigửi bởi clarkkent » T.Sáu 08/05/2009 2:18 pm

Thủ thuật:
Tác giả: gửi bởi Kỳ Nam vào ngày Thứ 3 28/08/2007 11:19 am
Mô tả:


Mã: Chọn hết

  1.    Dim chữsố() As String = {"không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín"}
  2.     Dim đơnvị() As String = {"đơn vị", "ngàn", "triệu", "tỉ"}
  3.  
  4.     Function đọc(ByVal số As String) As String
  5.         số = số.TrimStart("0")
  6.         'bỏ những số "0" ở đầu tiên
  7.  
  8.         If số.Length = 0 Then Return ""
  9.  
  10.         số = số.Replace(" ", "").Replace(",", "").Replace(".", "")
  11.         'nếu muốn cho phép có dấu " " hay "," hay "." trong số để dễ nhìn thì uncomment dòng đây
  12.  
  13.         Dim kq As String = ""
  14.         Dim chiềudài As Integer = số.Length
  15.  
  16.         'dùng biến để lưu lại từng nhóm ba chữ số dể dễ xài
  17.         Dim sốnhóm As Integer = Math.Ceiling(chiềudài / 3)
  18.         'tính số lượng nhóm 3 chữ số
  19.         Dim nhóm(sốnhóm - 1) As String
  20.  
  21.         'cóp nhóm đầu tiên , rồi lần lượt những nhóm còn lại , j là chiều dài nhóm đầu tiên
  22.         Dim j As Integer = chiềudài - (sốnhóm - 1) * 3
  23.         nhóm(0) = số.Substring(0, j)
  24.         For i As Integer = 1 To sốnhóm - 1
  25.             nhóm(i) = số.Substring(j + (i - 1) * 3, 3)
  26.         Next
  27.  
  28.         For i As Integer = 0 To nhóm.Length - 1
  29.             kq &= đọcnhóm3số(nhóm(i), tínhđơnvị(nhóm.Length - 1 - i)) & " "
  30.         Next
  31.  
  32.         Return kq.Trim.Replace("  ", " ")
  33.         'để chắc chắn không có 2 dấu cách đứng liền nhau và 0 có dấu cách ở 2 đầu
  34.     End Function
  35.  
  36.     Function tínhđơnvị(ByVal n As Integer) As String
  37.         'hàm đệ qui rất đơn giản
  38.         If n <= 3 Then
  39.             Return đơnvị(n)
  40.         Else
  41.             Return tínhđơnvị(n - 3) & " " & đơnvị(3)
  42.         End If
  43.     End Function
  44.  
  45.     Function đọcnhóm3số(ByVal số As String, ByVal đơnvị As String) As String
  46.         Dim kq As String = ""
  47.         Dim l As Integer = số.Length
  48.  
  49.         số = số.PadLeft(3, "0")
  50.  
  51.         If số = "000" Then Return ""
  52.         'không đọc những nhóm "000" như trong "1.000.000.000"
  53.  
  54.         If số.StartsWith("00") Then Return đọcsốhàngđơnvị(Val(số(2)), 0, l = 3) & " " & đơnvị
  55.         'chỗ này để tránh khó nghe khi đọc "1.000.000.001" , nó sẽ bỏ qua từ "không trăm" và chỉ đọc "một tỉ lẻ một đơn vị" , nếu không thích thì xóa dòng đây đi cũng được
  56.  
  57.         kq &= đọcsốhàngtrăm(Val(số(0)), l = 3)
  58.         kq &= đọcsốhàngchục(Val(số(1)))
  59.         kq &= đọcsốhàngđơnvị(Val(số(2)), Val(số(1)), l = 3)
  60.  
  61.         Return kq & " " & đơnvị
  62.     End Function
  63.  
  64.     Function đọcsốhàngtrăm(ByVal i As Integer, ByVal đọcsốkhông As Boolean) As String
  65.         'biến đọcsốkhông để tránh đọc chữ "không trăm" trong số < 100 như "75" , nếu không dùng biến này thì sẽ đọc là "không trăm bảy mươi lăm"
  66.  
  67.         If i = 0 Then
  68.             If đọcsốkhông Then
  69.                 Return "không trăm "
  70.             Else
  71.                 Return ""
  72.             End If
  73.         Else
  74.             Return chữsố(i) & " trăm "
  75.         End If
  76.     End Function
  77.  
  78.     Function đọcsốhàngchục(ByVal i As Integer) As String
  79.         Select Case i
  80.             Case 0
  81.                 Return ""
  82.             Case 1
  83.                 Return "mười "
  84.             Case Else
  85.                 Return chữsố(i) & " mươi "
  86.         End Select
  87.     End Function
  88.  
  89.     Function đọcsốhàngđơnvị(ByVal i As Integer, ByVal hàngchục As Integer, ByVal đọcchữlẻ As Boolean) As String
  90.         'biến đọcchữlẻ để tránh đọc chữ "lẻ" trong số < 10 như "2" , nếu không dùng biến này thì sẽ đọc là "lẻ hai"
  91.         'các lệnh điều khiển If...then và select...case chỉ là để đọc cho giống tiếng việt
  92.  
  93.         If i = 0 Then
  94.             Return ""
  95.         Else
  96.             If hàngchục = 0 Then
  97.                 If đọcchữlẻ Then
  98.                     Return "lẻ " & chữsố(i)
  99.                 Else
  100.                     Return chữsố(i)
  101.                 End If
  102.             Else
  103.                 Select Case i
  104.                     Case 1
  105.                         If hàngchục = 1 Then
  106.                             Return "một"
  107.                         Else
  108.                             Return "mốt"
  109.                         End If
  110.                     Case 5
  111.                         Return "lăm"
  112.                     Case Else
  113.                         Return chữsố(i)
  114.                 End Select
  115.             End If
  116.         End If
  117.  
  118.     End Function
  119.  
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

quang010692
Bài viết: 4
Ngày tham gia: T.Năm 05/02/2009 8:44 pm

Re: [VB.NET] Code chuyển số thành chữ!!!

Gửi bàigửi bởi quang010692 » T.Tư 13/05/2009 10:28 am

hàm left và right ko có sẵn trong vb.net....
có cách nào trim nhanh hơn ko?

Hình đại diện của người dùng
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 1641
Ngày tham gia: T.Tư 16/04/2008 11:25 am
Đến từ: Chợ Lách - Bến Tre
Been thanked: 31 time
Liên hệ:

Re: [VB.NET] Code chuyển số thành chữ!!!

Gửi bàigửi bởi clarkkent » T.Tư 13/05/2009 11:18 am

quang010692 đã viết:hàm left và right ko có sẵn trong vb.net....
có cách nào trim nhanh hơn ko?

vẫn xài được

Mã: Chọn hết

  1.        Microsoft.VisualBasic.Left()
  2.         Microsoft.VisualBasic.Right()


trim thì vầy thôi

Mã: Chọn hết

  1. Trim("chuỗi")
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

Hình đại diện của người dùng
tungcan5diop
Cựu chiến binh
Cựu chiến binh
Bài viết: 1123
Ngày tham gia: T.Tư 24/09/2008 4:04 pm
Đến từ: TPHCM
Has thanked: 1 time
Been thanked: 28 time

Re: [VB.NET] Code chuyển số thành chữ!!!

Gửi bàigửi bởi tungcan5diop » T.Hai 07/09/2009 10:47 am

cái Class của anh Phạm Tiên Sinh chạy chưa OK
xem hình
PTS-N.JPG
Debug cái Class cùa anh PTS

cái hàm của Kỳ Nam thì chạy OK rồi
xem hình
Tập tin đính kèm
KN-Y.JPG
Debug hàm của Kỳ Nam
Hỡi thế gian bug(lỗi) là gì?
Mà sửa...hoài không hết!

datproit
Bài viết: 3
Ngày tham gia: T.Bảy 21/11/2009 2:07 pm

đọc một số thành chữ!

Gửi bàigửi bởi datproit » T.Bảy 21/11/2009 2:25 pm

[tested=]sau này khi post bài bạn nhớ cho code vào thẻ,thẻ code nằm ở cái ComboBox "Programing Language",mình đã di chuyển bài viết của bạn sang đây cho gọn,sau này nên tìm kiếm xem có trùng chủ đề hay ko trước khi post bài bạn nhé. Người sửa tungcan5diop[/tested]
đây là modul giúp bạn có thể đọc một số thành lời (chuyển đổi số thành dạng text)
có lẽ bạn đã gặp nhiều trong quá trình học nhưng phạm vi đọc của chương trình này tương đối lớn nên thuật toán có khác bạn nhé. bạn nào thích Vb.net có sẵn mã nguồn đây.
các pác Pro đọc vào đừng chê nha , em mới học lớp 9 thôi!
Ai thích suy nghĩ thêm thì còn có mã viết bằng Pascal luôn, nhưng mình không up ở diễn dàn Vb. liên hệ với mình qua nick yahoo: :x datproit mình sẽ gửi Code cho '{ muốn làm quen ó}
modul đây, các pá dùng hàm Read để đọc số nhé dữ liệu vào là String
hoặc download ở địa chỉ cho nhanh:
http://www.mediafire.com/file/0lulzyyzyye/ReadNumber.vb


Mã: Chọn hết

  1. Module ReadNumber
  2.     Public donvi(0 To 10)
  3.     'hàm KiemTraSo( str) kiểm tra dữ liệu nhập vào có phải là các kí tự số hay không
  4.     Function KiemTraSo(ByVal str As String) As String
  5.         Dim i
  6.         kiemtraso = True
  7.         For i = 0 To Len(str)
  8.             ' 0 có mã ASCII là 48
  9.             ' 9 có mã ASCII là 58
  10.             If Not ((Asc(str(0)) > 47) And (Asc(str(0)) < 57)) Then
  11.                 KiemTraSo = False
  12.                 Exit Function
  13.             End If
  14.         Next
  15.     End Function
  16.     'Thủ tục Load() gán giá trị cho biến mảng Donvi (0 to 10) chứa các tên gọi số
  17.     Private Sub load()
  18.         donvi(0) = ""
  19.         donvi(1) = "một"
  20.         donvi(2) = "hai"
  21.         donvi(3) = "ba"
  22.         donvi(4) = "bốn"
  23.         donvi(5) = "năm"
  24.         donvi(6) = "sáu"
  25.         donvi(7) = "bảy"
  26.         donvi(8) = "tám"
  27.         donvi(9) = "chín"
  28.         donvi(10) = "mười"
  29.     End Sub
  30.     ' hàm Copy sẽ sao chép một chuổi con từ chuổi mẹ
  31.     Function copy(ByVal st As String, ByVal start As Integer, ByVal length As Integer) As String
  32.         Dim l = Microsoft.VisualBasic.Left(st, start + length)
  33.         Dim r = Microsoft.VisualBasic.Right(l, length)
  34.         copy = r
  35.     End Function
  36.  
  37.     'hàm dochangchuc() đọc các số hàng chục, tức có hai chữ số
  38.     ' viết hàm này có mục đích là tránh sự trùng lập khi đọc chữ số hàm trăm ở hàm readNumber()
  39.     Function docHangChuc(ByVal number As String) As String
  40.         Dim num = CInt(number)
  41.         Dim TextOut As String = ""
  42.         Dim donV, chuc, tram
  43.         donV = donvi(num Mod 10)        ' chữ số hàm đơn vị { lưu ý là chỉ lấy 1 số vào trả về tên gọi}
  44.         chuc = donvi((num Mod 100) \ 10) ' chữ số hàng trăm
  45.         tram = donvi((num Mod 1000) \ 100) 'chữ số hàng ngàn
  46.  
  47.         Select Case num
  48.             Case 10
  49.                 TextOut = "mười"
  50.             Case 11 To 19
  51.                 TextOut = "mười " & donV
  52.             Case 20 To 99
  53.                 If num Mod 10 = 1 Then ' các số có tận cùng là số 1, đọc là "mốt"
  54.                     TextOut = chuc & " mươi mốt"
  55.                 Else
  56.                     If num Mod 10 <> 5 Then
  57.                         TextOut = chuc & " mươi " & donV
  58.                     Else ' các số có tận cùng là số 5 , đọc là "lăm"
  59.                         TextOut = chuc & " mươi lăm"
  60.                     End If
  61.                 End If
  62.         End Select
  63.         docHangChuc = TextOut ' trả giá trị cho hàm
  64.     End Function
  65.     Function ReadNumber(ByVal number As String) As String
  66.         Dim TextOut As String = ""
  67.         If number <> "" Then
  68.  
  69.             Dim num = CInt(number)
  70.             Dim donV, chuc, tram
  71.  
  72.             donV = donvi(num Mod 10)
  73.             chuc = donvi((num Mod 100) \ 10)
  74.             tram = donvi((num Mod 1000) \ 100)
  75.  
  76.             Select Case num
  77.                 Case 0
  78.                     TextOut = "không"
  79.                 Case 1 To 9
  80.                     TextOut = donV
  81.                 Case 10 To 99
  82.                     TextOut = docHangChuc(num)
  83.                 Case 100 To 999
  84.                     If num Mod 100 = 0 Then TextOut = tram & " trăm"
  85.                     If ((num Mod 100) \ 10) = 0 Then
  86.                         TextOut = tram & " trăm lẻ " & donV
  87.                     Else
  88.                         TextOut = tram & " trăm " & docHangChuc(num Mod 100)
  89.                     End If
  90.             End Select
  91.         End If
  92.         ReadNumber = TextOut
  93.     End Function
  94.  
  95.     Function readInt(ByVal StrNum As String) As String
  96.         Dim temp = ""
  97.         If KiemTraSo(StrNum) Then
  98.             load()
  99.             Dim textO = StrNum
  100.             Dim i, vitri, sokitu, solop
  101.             Dim MangLop(0 To 6) ' lưu trữ 3 số trên một phần tử
  102.             Dim MangTenLop(0 To 6) ' lưu trữ tên các lớp của số
  103.             MangTenLop(0) = "" 'lớp 0 không tồn tại
  104.             MangTenLop(1) = "" 'lớp thứ 1 có 3 chữ số tức là hàng trăm, nhưng ta đã sử lí số hàng trăm ở hàm readNumber rồi nên bỏ trống chổ này
  105.             MangTenLop(2) = " nghìn "
  106.             MangTenLop(3) = " triệu "
  107.             MangTenLop(4) = " tỉ "
  108.             MangTenLop(5) = " nghìn tỉ "
  109.             MangTenLop(6) = " triệu tỉ "
  110.             ' bạn có thể mở rộng thêm phạm vi đọc
  111.             ' bằng cách thêm phần tử cho biến mảng MangTenLop  
  112.  
  113.             sokitu = Len(textO)
  114.             If sokitu Mod 3 = 0 Then
  115.                 solop = sokitu \ 3
  116.             Else
  117.                 solop = sokitu \ 3 + 1
  118.             End If
  119.             readInt = ""
  120.             If solop > 6 Then Exit Function
  121.  
  122.             vitri = (sokitu Mod 3)
  123.             If (vitri = 0) And (solop >= 2) Then vitri = 3
  124.  
  125.             If solop = 1 Then
  126.                 MangLop(1) = textO
  127.             End If
  128.  
  129.             If solop >= 2 Then
  130.                 If sokitu Mod 3 <> 0 Then
  131.                     MangLop(1) = copy(textO, 0, sokitu Mod 3)
  132.                 Else
  133.                     MangLop(1) = copy(textO, 0, 3) ' trường hợp số kí tự chia hết cho 3 thì không dùng công thức "sokitu Mod 3" để sát định số kí tụ ở lớp lớn nhất
  134.                 End If
  135.  
  136.                 For i = 2 To solop
  137.                     MangLop(i) = copy(textO, vitri, 3) ' sao chép các kí tự theo lớp vào mảng "MangLop()"
  138.                     vitri += 3 'mổi lớp có 3 kí số nên phải tăng lên 3 ở vị trí copy tiếp theo
  139.                 Next
  140.             Else
  141.                 MangLop(2) = copy(textO, 1, 3) ' trường hợp có 2 lớp
  142.             End If
  143.  
  144.             For i = 1 To solop ' đọc các số sau khi đã có 2 mảng cần thiết
  145.                 temp = temp & ReadNumber(MangLop(i)) & MangTenLop(solop - i + 1)
  146.             Next
  147.             readInt = temp
  148.         Else ' trường hợp dữ liệu nhập vào sai
  149.             readInt = "Sai giá trị"
  150.         End If
  151.     End Function
  152.  
  153.     Function Read(ByVal num As String) As String
  154.         Dim number = ""
  155.         Dim reT = ""
  156.         Dim i
  157.         For i = 1 To Len(num)
  158.             number = number & num(i)
  159.         Next
  160.  
  161.        If num(1) = "-" Then
  162.             reT = "Âm " & readInt(number)
  163.         Else
  164.             reT = readInt(num)
  165.         End If
  166.         Read = reT
  167.     End Function
  168.  
  169. End Module

datproit
Bài viết: 3
Ngày tham gia: T.Bảy 21/11/2009 2:07 pm

Re: [VB.NET] Code chuyển số thành chữ! mong các sư hunh chỉ giáo

Gửi bàigửi bởi datproit » T.Năm 31/12/2009 8:18 pm

Tên chương trình:
Ngôn ngữ lập trình: Visual Basic 2005
Tác giả: Hồ Minh Đạt - 9/5 - THCS Nguyễn Hiền">Hồ Minh Đạt - 9/5 - THCS Nguyễn Hiền
Chức năng:

module này có thể chuyển 1 số thành cách đọc trong tiếng việt và cả tiếng anh nữa
  1.   Module ReadNumber
  2.     ' hàm này có phạm vi đọc là 21 chữ số,
    1. [vbnet]</span></div></li></ol></div></div></div><div class="codebox_plus_footer"><a href="http://qbnz.com/highlighter/">GeSHi</a> &copy; <a href="https://www.phpbb.com/customise/db/mod/codebox_plus/">Codebox Plus</a></div></div>
    tương ứng với 7 lớp
    Private donvi(0 To 1, 0 To 10)

    'Thủ tục Load() gán giá trị cho biến mảng Donvi (0 to 10) chứa các tên gọi số
    Private Sub load()
    donvi(1, 0) = ""
    donvi(1, 1) = "một"
    donvi(1, 2) = "hai"
    donvi(1, 3) = "ba"
    donvi(1, 4) = "bốn"
    donvi(1, 5) = "năm"
    donvi(1, 6) = "sáu"
    donvi(1, 7) = "bảy"
    donvi(1, 8) = "tám"
    donvi(1, 9) = "chín"
    donvi(1, 10) = "mười"

    donvi(0, 0) = ""
    donvi(0, 1) = "one"
    donvi(0, 2) = "two"
    donvi(0, 3) = "three"
    donvi(0, 4) = "four"
    donvi(0, 5) = "five"
    donvi(0, 6) = "six"
    donvi(0, 7) = "seven"
    donvi(0, 8) = "eight"
    donvi(0, 9) = "nine"
    donvi(0, 10) = "ten"
    End Sub
    ' hàm Copy sẽ sao chép một chuổi con từ chuổi mẹ
    Function copy(ByVal st As String, ByVal start As Integer, ByVal length As Integer) As String
    Dim ll
    ll = Microsoft.VisualBasic.Left(st, start + length)
    Dim r
    r = Microsoft.VisualBasic.Right(ll, length)
    copy = r
    End Function

    ' hàm nay loạt bỏ các kí tự không phải là chữ số
    Function lamDepSo(ByVal strnumber As String) As String
    Dim i
    Dim outString As String = ""
    ' 0..9 có mã ASCII là 48..58

    For i = 0 To Len(strnumber) - 1
    If (Asc(strnumber(i)) > 47) And (Asc(strnumber(i)) < 59) Then
    outString = outString + strnumber(i)
    End If
    Next

    lamDepSo = outString
    End Function

    '---------------------------------------------------------------------------------------
    'đọc số hàng chục của tiếng Anh
    Function docHangChucEnglish(ByVal number As String) As String
    Dim num = CInt(number)
    Dim TextOut As String = ""
    Dim donV, chuc
    donV = donvi(0, num Mod 10) ' chữ số hàm đơn vị { lưu ý là chỉ lấy 1 số vào trả về tên gọi}
    chuc = donvi(0, (num Mod 100) \ 10) ' chữ số hàng trăm

    Select Case num
    Case 10
    TextOut = "ten"
    Case 11
    TextOut = "eleven "
    Case 12
    TextOut = "twelve"
    Case 13
    TextOut = "thirteen"
    Case 14 To 19
    If num = 15 Then
    TextOut = "fifteen"
    Else
    TextOut = donV & "teen"
    End If
    Case 20 To 29
    TextOut = " twenty " & donV
    Case 30 To 59
    If num = 30 Then
    TextOut = " thirty "
    Else
    If num = 50 Then TextOut = " fifty "

    Select Case num
    Case 31 To 39
    TextOut = " thirty " & donV
    Case 40 To 49
    TextOut = " fourty " & donV
    Case 50 To 59
    TextOut = " fifty " & donV
    End Select
    End If
    Case 60 To 99
    If num > 79 And num < 90 Then ' trường hợp so 80 viết có 2 chữ "t"
    TextOut = " eighty " & donV
    Else
    TextOut = chuc & "ty " & donV
    End If
    End Select
    docHangChucEnglish = TextOut ' trả giá trị cho hàm
    End Function
    'đọc số hàng chục của tiếng việt
    Function docHangChuc(ByVal number As String) As String
    Dim num = CInt(number)
    Dim TextOut As String = ""
    Dim donV, chuc
    donV = donvi(1, num Mod 10) ' chữ số hàm đơn vị { lưu ý là chỉ lấy 1 số vào trả về tên gọi}
    chuc = donvi(1, (num Mod 100) \ 10) ' chữ số hàng trăm


    Select Case num
    Case 10
    TextOut = "mười"
    Case 11 To 19
    TextOut = "mười " & donV
    Case 20 To 99
    If num Mod 10 = 1 Then ' các số có tận cùng là số 1, đọc là "mốt"
    TextOut = chuc & " mươi mốt"
    Else
    If num Mod 10 <> 5 Then
    TextOut = chuc & " mươi " & donV
    Else ' các số có tận cùng là số 5 , đọc là "lăm"
    TextOut = chuc & " mươi lăm"
    End If
    End If
    End Select
    docHangChuc = TextOut ' trả giá trị cho hàm
    End Function
    'doc so từ 1..99
    Function ReadNumber(ByVal lan As Integer, ByVal number As String) As String
    Dim TextOut As String = ""
    Dim num = number
    Dim donV, chuc, tram
    donV = donvi(lan, num Mod 10)
    chuc = donvi(lan, (num Mod 100) \ 10)
    tram = donvi(lan, (num Mod 1000) \ 100)
    'đọc tiếng Việt
    If lan = 0 Then
    Select Case num
    Case 0
    TextOut = "Zero"
    Case 1 To 9
    TextOut = donV
    Case 10 To 99
    TextOut = docHangChucEnglish(num)
    Case 100 To 999
    If num Mod 100 = 0 Then TextOut = tram & " hundred and "
    If ((num Mod 100) \ 10) = 0 Then
    TextOut = tram & " hundred and " & donV
    Else
    TextOut = tram & " hundred and " & docHangChucEnglish(num Mod 100)
    End If
    End Select
    End If
    'đọc tiếng Anh
    If lan = 1 Then
    Select Case num
    Case 0
    TextOut = "không"
    Case 1 To 9
    TextOut = donV
    Case 10 To 99
    TextOut = docHangChuc(num)
    Case 100 To 999
    If num Mod 100 = 0 Then TextOut = tram & " trăm"
    If ((num Mod 100) \ 10) = 0 Then
    TextOut = tram & " trăm lẻ " & donV
    Else
    TextOut = tram & " trăm " & docHangChuc(num Mod 100)
    End If
    End Select
    End If
    ReadNumber = TextOut
    End Function

    'dùng hàm nay để chuyển đổi số thành lời. tham số 'Lan' là trị số qui định ngôn ngữ Anh hay việt
    ' quy ước: 1 là tiếng Việt
    ' 0 là tiếng Anh
    Function ConvertNumToString(ByVal Lan As Integer, ByVal strnumberInput As String) As String
    Dim TextInput = lamDepSo(strnumberInput) ' xu li so nhap vao
    ConvertNumToString = ""

    If TextInput = "" Or Len(TextInput) > 21 Then
    ConvertNumToString = "Too large number or not enter number"
    Exit Function
    End If

    Dim temp = ""

    If strnumberInput(0) = "-" Then
    If Lan = 1 Then
    temp = "Âm "
    Else
    temp = "Ninus "
    End If
    End If

    load() ' gan gia trị cho các biến mảng


    Dim i, vitri, sokitu, solop
    Dim MangLop(0 To 7) ' lưu trữ 3 số trên một phần tử
    Dim MangTenLop(0 To 1, 0 To 7) ' lưu trữ tên các lớp của số

    MangTenLop(0, 0) = "" 'lớp 0 không tồn tại
    MangTenLop(0, 1) = "" 'lớp thứ 1 có 3 chữ số tức là hàng trăm, nhưng ta đã sử lí số hàng trăm ở hàm readNumber rồi nên bỏ trống chổ này
    MangTenLop(0, 2) = " thousand "
    MangTenLop(0, 3) = " million "
    MangTenLop(0, 4) = " bilion "
    MangTenLop(0, 5) = " thousand bilion "
    MangTenLop(0, 6) = " million bilion "
    MangTenLop(0, 7) = " billion bilion "

    MangTenLop(1, 0) = "" 'lớp 0 không tồn tại
    MangTenLop(1, 1) = "" 'lớp thứ 1 có 3 chữ số tức là hàng trăm, nhưng ta đã sử lí số hàng trăm ở hàm readNumber rồi nên bỏ trống chổ này
    MangTenLop(1, 2) = " nghìn "
    MangTenLop(1, 3) = " triệu "
    MangTenLop(1, 4) = " tỉ "
    MangTenLop(1, 5) = " nghìn tỉ "
    MangTenLop(1, 6) = " triệu tỉ "
    MangTenLop(1, 7) = " tỉ tỉ "
    ' bạn có thể mở rộng thêm phạm vi đọc
    ' bằng cách thêm phần tử cho biến mảng MangTenLop

    sokitu = Len(TextInput)
    solop = sokitu \ 3
    If sokitu Mod 3 > 0 Then solop += 1


    If solop > 7 Then Exit Function

    vitri = (sokitu Mod 3)
    If (vitri = 0) And (solop >= 2) Then vitri = 3
    [vb][/vb]
    If solop = 1 Then
    MangLop(1) = TextInput
    End If

    If solop >= 2 Then
    If sokitu Mod 3 <> 0 Then
    MangLop(1) = copy(TextInput, 0, sokitu Mod 3)
    Else
    MangLop(1) = copy(TextInput, 0, 3) ' trường hợp số kí tự chia hết cho 3 thì không dùng công thức "sokitu Mod 3" để sát định số kí tụ ở lớp lớn nhất
    End If

    For i = 2 To solop
    MangLop(i) = copy(TextInput, vitri, 3) ' sao chép các kí tự theo lớp vào mảng "MangLop()"
    vitri += 3 'mổi lớp có 3 kí số nên phải tăng lên 3 ở vị trí copy tiếp theo
    Next
    Else
    MangLop(2) = copy(TextInput, 1, 3) ' trường hợp có 2 lớp
    End If

    For i = 1 To solop ' đọc các số sau khi đã có 2 mảng cần thiết
    temp = temp & ReadNumber(Lan, MangLop(i)) & MangTenLop(Lan, solop - i + 1)
    Next
    ConvertNumToString = temp
    End Function

    End Module
    [/vbnet]
    cách sử dụng
    gọi hàm với tham số Lan=1 là tiếng việt lan=2 là tiếng anh
    hàm này của em có thể đọc được số có tối đa 21 chữ số
    [vbnet]lbVietNam.Text = ConvertNumToString(1, "123456789123456789123") 'tieng viet
    LbEnglish.Text = ConvertNumToString(0, "123456789123456789123") 'chuyen sang tieng anh
    [/vbnet]

itconga
Bài viết: 2
Ngày tham gia: CN 06/11/2011 12:13 am

Re: [VB.NET] Code chuyển số thành chữ!!!

Gửi bàigửi bởi itconga » CN 06/11/2011 12:21 am

clarkkent có thể cho mình hỏi tý được không ?
mình không hiểu code chổ này?
If l < k Then
tg = mid(chuoi1, i - (l + 1) * 3 + 1, 3)
Else
tg = Microsoft.VisualBasic.Left(chuoi1, i - l * 3)
End If
Có phải đây là đệ quy trong VB không?
cảm ơn .

Hình đại diện của người dùng
PhapSuXeko
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 295
Ngày tham gia: CN 03/05/2009 7:44 pm
Đến từ: Tây Ninh
Has thanked: 1 time
Been thanked: 10 time
Liên hệ:

Re: [VB.NET] Code chuyển số thành chữ!!!

Gửi bàigửi bởi PhapSuXeko » CN 06/11/2011 11:28 pm

  1. If l < k Then
  2. tg = mid(chuoi1, i - (l + 1) * 3 + 1, 3)
  3. Else
  4. tg = Microsoft.VisualBasic.Left(chuoi1, i - l * 3)
  5. End If
  6.  


Mid(s, 1, 3) -> Hàm lấy chuỗi con từ chuỗi s, lấy 3 ký tự bắt đầu từ ký tự thứ 1
Microsoft.VisualBasic.Left(s, 3) -> Lấy chuỗi con từ chuỗi s, lấy 3 ký tự bên trái
Trang chủ phần mềm xem ảnh ImageGlass: http://www.imageglass.org

nguyentrinhthu
Thành viên tích cực
Thành viên tích cực
Bài viết: 105
Ngày tham gia: T.Tư 23/04/2008 8:43 am
Has thanked: 6 time
Been thanked: 1 time

Re: [VB.NET] Code chuyển số thành chữ!!!

Gửi bàigửi bởi nguyentrinhthu » T.Năm 17/10/2013 10:56 am

clarkkent đã viết:Thủ thuật:
Tác giả: gửi bởi hoangthu1974 » T.Tư 12/11/2008 9:09 am
Mô tả:


Mã: Chọn hết

    '------------------------------------------------------------------    ' Function Name: Num2Text    ' Description  : Change the numeric to text speech    ' Author       : Hoang Thu    ' Date Create  : 23/12/2007    '------------------------------------------------------------------    Function Num2Text(ByVal s As String, Optional ByVal Local As Boolean = False) As String        'Optional ByVal Local As Boolean = False 'Nam Kỳ Reading        'Optional ByVal Local As Boolean = True 'Bắc Kỳ Reading        Dim DS As Char = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator        Dim GS As Char = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberGroupSeparator        Dim fDS As Boolean = False        Dim fDecAdd As Boolean = False        Dim so() As String = {"không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín"}        Dim hang() As String = {"", "ngàn", "triệu", "tỷ"}        If Local Then            hang(1) = "nghìn"        End If        Dim i, j, cntDS, donvi, chuc, tram As Integer        Dim str As String        str = ""        s = s.Replace(GS, "")        If s.Substring(s.Length - 1, 1) = DS Then s = s.Substring(0, s.Length - 1)         i = s.Length        While s.Substring(0, 1) = "0"            s = s.Substring(1, s.Length - 1)        End While        If s.Substring(0, 1) = DS Then s = "0" & s        cntDS = 0        If InStr(s, DS) Then            For i = 0 To s.Length - 1 Step 1                If s.Substring(i, 1) = DS Then                    cntDS += 1                End If            Next        End If        If cntDS > 1 Then Return ""        If cntDS > 0 Then            While s.Substring(s.Length - 1, 1) = "0"                s = s.Substring(0, s.Length - 1)            End While        End If        If s.Substring(s.Length - 1, 1) = DS Then s = s.Substring(0, s.Length - 1)         i = s.Length - 1        If i = 0 Then            str = ""        Else            j = 0            Do While i >= 0                If s.Substring(i, 1) = DS Then                    fDS = True                    i -= 1                    GoTo DecimalAdd                Else                    donvi = Int(s.Substring(i, 1))                    i -= 1                End If                 If i > -1 Then                    If s.Substring(i, 1) = DS Then                        i -= 1                        chuc = -1                        tram = -1                        fDS = True                        GoTo NumberRead                    Else                        chuc = Int(s.Substring(i, 1))                    End If                Else                    chuc = -1                End If                i -= 1                 If i > -1 Then                    If s.Substring(i, 1) = DS Then                        i -= 1                        tram = -1                        fDS = True                        GoTo NumberRead                    Else                        tram = Int(s.Substring(i, 1))                    End If                Else                    tram = -1                End If                i -= 1NumberRead:                If donvi > 0 Or chuc > 0 Or tram > 0 Or j = 3 Then str = hang(j) & " " & str                j += 1                 If j > 3 Then j = 1                 If donvi = 1 And chuc > 1 Then                    str = "mốt" & " " & str                ElseIf donvi = 4 And chuc > 1 Then                    If Local Then                        str = "tư" & " " & str                    Else                        str = so(donvi) & " " & str                    End If                ElseIf donvi = 5 Then                    If chuc > 0 Then                        str = "lăm" & " " & str                    Else                        str = so(donvi) & " " & str                    End If                Else                    If donvi <> 0 Then str = so(donvi) & " " & str                End If                 If chuc < 0 Then                    If Not fDS Then Exit Do                Else                    If chuc = 0 And donvi > 0 Then                        str = "lẻ" & " " & str                    ElseIf chuc = 1 Then                        str = "mười" & " " & str                    ElseIf chuc > 1 Then                        str = so(chuc) & " " & "mươi" & " " & str                    End If                End If                If tram < 0 Then                    If Not fDS Then Exit Do                Else                    If tram > 0 Or chuc > 0 Or donvi > 0 Then                        str = so(tram) & " " & "trăm" & " " & str                    End If                End IfDecimalAdd:                If fDS Then                    str = "phảy " & str                    j = 0                    fDS = False                    fDecAdd = True                End If            Loop        End If         If str.Length > 0 Then            str = str.Trim            str = str.Replace("  ", " ")            str = UCase(str.Substring(0, 1)) & str.Substring(1, str.Length - 1)            Return str        Else            Return ""        End If    End Function



kinh đọc được cả triệu tỷ luôn


Quay về “[.NET] Chuỗi và Thời gian”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.2 khách