Hướng dẫn code key chương trình viết bằng VFP   82 comments


VFP được viết tắt từ Visual Foxpro, một ngôn ngữ lập trình hướng đối tượng tương đối mạnh, tuy nhiên Microsoft đã dừng phát triển từ phiên bản 9.0 SP2.

Ngày nay, nhiều công ty phần mềm đang có xu hướng chuyển dần từ VFP sang .Net, vì vậy VFP dần dần sẽ bị lãng quên, tài liệu hướng dẫn về VFP cũng sẽ ít dần.

Tuy nhiên vẫn còn một số sản phẩm có thể vì lý do nào đó tác giả vẫn giữ nguyên nền tảng VFP, chỉ cải tiến một số chức năng cho phù hợp quy định hiện hành, diện mạo và tính năng vẫn như xưa.

Có những Công ty lại hình thành những sản phẩm mới dựa trên code của những công ty lớn, thường được gọi là sao chép.

Xin giới thiệu phần mềm quản lý tồn kho miễn phí SSE Inventory 2012 do Công ty CP giải pháp phần mềm doanh nghiệp cải tiến code từ phần mềm FA của công ty phần mềm QLDN FAST:

Link download: download SSE Inventory 2012 FV5.0

Lic tham khảo

Giao diện chính:

 photo image002_zpsb65bfb34.jpg

Cách thức đăng ký là: key file có tên đầy đủ: .\SSE\SI2012.FV5.0\COD\SSE.DBF

Cốt lõi của SSE là hàm:


FUNCTION ENCODE

PARAMETER txt, rvalue

PUBLIC r

PUBLIC m

PUBLIC n

STORE 0 TO r, m, n

bignum = 32768

PRIVATE i, c, d

r = rvalue

m = 69

n = 47

FOR i = 1 TO LEN(txt)

c = ASC(SUBSTR(txt, i, 1))

r = MOD((r*m+n), bignum)

c = BITXOR(BITAND(r, 63), c)

txt = STUFFC(txt, i, 1, CHR(c))

ENDFOR

RETURN txt

END FUNCTION

Chuyển code VFP sang VB để các bạn dễ hiểu:

 CODE VFP  CODE VB
PARAMETER txt, rvalue Byval txt as …, Byval rvalue as …
PUBLIC r …  (khởi tạo biến Public) Dim r as …
STORE 0 TO r r = 0
PRIVATE i (tương tự Public nhưng là biến Private) Dim i as …
For i = 1 to len(txt)…Endfor For i = 1 to len(txt)…Next i
SUBSTR(txt, i, 1) Mid(txt, i, 1)
MOD((r*m+n), bignum) (r*m+n) Mod bignum
BITXOR(BITAND(r, 63), c) BITAND(r, 63) Xor c

Còn 2 hàm nữa chưa có hàm tương đương, nên phải tự tạo:

  1. BITAND(r, 63)  tương tự Xor nhưng giá trị lấy là And, ví dụ:
               a =   9  (01001  hệ nhị phân)
               b = 10  (01010 hệ nhị phân)
               c = BitAnd(a, b)  = 01000 (hệ nhị phân) = 8 (hệ thập phân)
               hàm VB sẽ viết như sau:

                               Function BitAnd(ByVal giatri1 As Integer, ByVal giatri2 As Integer) As Integer
                                              BitAnd = giatri1 And giatri2
                               End Function

2.       STUFFC(txt, i, 1, CHR(c))
Cú pháp: STUFFC(chuỗi gốc, vị trí thay thế, số ký tự thay thế, thay thế vào chuỗi mới)
Ví dụ: Stuffc(“ABCDE“,2,2,“THANH“)
–          Trong chuỗi “ABCDE“ từ vị trí thứ 2 bỏ 2 ký tự tức “BC“ thay thế vào chuỗi “THANH“
–          Stuffc(“ABCDE“,2,2,“THANH“) = “ATHANHDE“
hàm VB sẽ viết như sau:


                               Function Stuffc(ByVal txt As String, ByVal start As Integer, ByVal numberchar As Integer, ByVal replacechar As String) As String
                                              Dim txt1 As String, txt2 As String, num1 As Integer
                                              txt1 = Mid(txt, 1, start - 1)
                                              txt2 = Mid(txt, start + numberchar)
                                              Stuffc = txt1 & replacechar & txt2
                               End Function

Sau khi chuyển code hoàn chỉnh ta được hàm Endcode như sau:


               Function Encode(ByVal txt As String, rvalue As Integer)
                               Dim r As Double
                               Dim m As Integer
                               Dim n As Integer
                               r = 0
                               m = 0
                               n = 0
                               Dim bignum As Double
                               bignum = 32768
                               Dim i As Integer, c As Integer, d As Integer
                               r = rvalue
                               m = 69
                               n = 47
                               For i = 1 To Len(txt)
                                              c = Asc(Mid(txt, i, 1))
                                              r = (r * m + n) Mod bignum
                                              c = BitAnd(r, 63) Xor c
                                              txt = Stuffc(txt, i, 1, Chr(c))
                               Next i
                               Encode = txt
               End Function

Đây là file mẫu để cập nhật chuỗi từ Excel về file DBF file mẫu VBA cập nhật BDF

Chúc các bạn thành công!

Posted 19/09/2013 by phamhqthanh in Phần mềm kế toán khác

82 responses to “Hướng dẫn code key chương trình viết bằng VFP

Subscribe to comments with RSS.

  1. Cảm ơn bác thanh!
    Cái này hình như free nên xài ko cầi key

  2. cảm ơn bác thanh đã chia sẻ, à bác cho em xin cái tut về soft SEDU nhé. (gửi vào mail hộ em)
    thank you so much
    best regards

  3. Code kia của VB, ta bốc nó bỏ vào VB của MS Access được ko bác thanh?

  4. Em download PM về mà ko có PM giải mã. Nên ko thể cài được. Sư phụ gửi vào Mail cho em với!

  5. Em down PM về mà ko có PM giải mã. Nên ko thể cài được. Sư phụ gửi vào Mail cho em với!

  6. Tiện đây các bác cho em hỏi. Có bác nào có PM quản lý phòng bán vé máy bay ko à?

  7. Tại sao là Encode(“chuỗi cần encrypt”, 501)—->501?

  8. không biết có cần chọn font như thế nào , mà tôi add hàm vô excel để thử thì chỉ ra đúng có 1 vài chữ….:)

  9. FUNCTION GetName
    PARAMETER _str1
    _str2 = CHR(1)
    FOR i = 1 TO LEN(_str1)
    IF ASC(SUBSTR(_str1, i, 1))>250
    _str2 = _str2+SUBSTR(_str1, i, 1)
    ELSE
    _str2 = _str2+CHR(ASC(SUBSTR(_str1, i, 1)))
    ENDIF
    ENDFOR
    _str2 = _str2+CHR(253)+CHR(3)
    RETURN _str2
    ENDFUNC
    **
    PROCEDURE LOGIN
    isalogin = .T.
    DO WHILE isalogin
    STORE 0 TO _check, m_user_id
    STORE .F. TO is_admin
    DO FORM FrmLogin TO lcflgok
    IF LASTKEY()=27
    ON SHUTDOWN
    QUIT
    ENDIF
    IF lcflgok
    DO FORM frmMain
    ELSE
    ON SHUTDOWN
    QUIT
    ENDIF
    ENDDO
    ENDPROC
    **
    FUNCTION SSEEncodeFull
    PARAMETER _str
    RETURN sseencode(_str, 500)
    ENDFUNC
    **
    FUNCTION SSEEncode
    PARAMETER txt, rvalue, a, b
    PUBLIC r
    PUBLIC m
    PUBLIC n
    STORE 0 TO r, m, n
    bignum = 32768
    PRIVATE i, c, d
    IF TYPE(‘Rvalue’)=’N’
    r = rvalue
    ENDIF
    IF TYPE(‘A’)=’N’
    m = MOD((a*4+1), bignum)
    ELSE
    IF m=0
    m = 69
    ENDIF
    ENDIF
    IF TYPE(‘B’)=’N’
    n = MOD((b*2+1), bignum)
    ELSE
    IF n=0
    n = 47
    ENDIF
    ENDIF
    FOR i = 1 TO LEN(txt)
    c = ASC(SUBSTR(txt, i, 1))
    r = MOD((r*m+n), bignum)
    c = BITXOR(BITAND(r, 63), c)
    txt = STUFFC(txt, i, 1, CHR(c))
    ENDFOR
    RETURN txt
    ENDFUNC
    —>không biết đoạn nầy nói gì nữa!?

  10. Tôi thấy thằng SSE và thằng V6 bê nguyên xi code của Fast mà sao chúng vẫn tồn tại bác Thanh nhỉ?

  11. FUNCTION con_out
    PARAMETER string
    CLEAR
    SET TALK OFF
    stringin = ‘Ú¿ÄÉË»ÍÕѸÖÒ·ÃÅ´³ÌιºÆصÇ׶ÀÁÙÄÈʼÍÔϾÓн°±²ÛÝßÜÞþ©ª’
    stringout = ‘0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz’
    chuoimoi = ”
    string = ALLTRIM(string)
    FOR i = 1 TO LEN(string)
    chu = SUBSTR(string, i, 1)
    DO CASE
    CASE AT(chu, stringin)>0
    chuoimoi = chuoimoi+SUBSTR(stringout, AT(chu, stringin), 1)
    OTHERWISE
    chuoimoi = chuoimoi+chu
    ENDCASE
    ENDFOR
    RETURN chuoimoi
    ENDFUNC
    **
    FUNCTION Con_in
    PARAMETER string
    CLEAR
    SET TALK OFF
    stringin = ‘0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz’
    stringout = ‘Ú¿ÄÉË»ÍÕѸÖÒ·ÃÅ´³ÌιºÆصÇ׶ÀÁÙÄÈʼÍÔϾÓн°±²ÛÝßÜÞþ©ª’
    chuoimoi = ”
    string = ALLTRIM(string)
    FOR i = 1 TO LEN(string)
    chu = SUBSTR(string, i, 1)
    DO CASE
    CASE AT(chu, stringin)>0
    chuoimoi = chuoimoi+SUBSTR(stringout, AT(chu, stringin), 1)
    OTHERWISE
    chuoimoi = chuoimoi+chu
    ENDCASE
    ENDFOR
    RETURN chuoimoi
    RETURN
    ENDFUNC

    Nhờ Bác Thanh rảnh chuyển 2 thằng nầy qua VB dùm…

    • Function con_out(ByVal string1 As String)
      stringin = “Ú¿ÄÉË»ÍÕѸÖÒ·ÃÅ´³ÌιºÆصÇ׶ÀÁÙÄÈʼÍÔϾÓн°±²ÛÝßÜÞþ©ª”
      stringout = “0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz”
      chuoimoi = “”
      string1 = Trim(string1)
      For i = 1 To Len(string1)
      chu = Mid(string1, i, 1)
      If InStr(stringin, chu) > 0 Then
      chuoimoi = chuoimoi + Mid(stringout, InStr(stringin, chu), 1)
      Else
      chuoimoi = chuoimoi + chu
      End If
      Next i
      con_out = chuoimoi
      End Function

      Function Con_in(ByVal string1 As String)
      stringin = “0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz”
      stringout = “Ú¿ÄÉË»ÍÕѸÖÒ·ÃÅ´³ÌιºÆصÇ׶ÀÁÙÄÈʼÍÔϾÓн°±²ÛÝßÜÞþ©ª”
      chuoimoi = “”
      string1 = Trim(string1)
      For i = 1 To Len(string1)
      chu = Mid(string1, i, 1)
      If InStr(stringin, chu) > 0 Then
      chuoimoi = chuoimoi + Mid(stringout, InStr(stringin, chu), 1)
      Else
      chuoimoi = chuoimoi + chu
      End If
      Next i
      Con_in = chuoimoi
      End Function
      ======================================
      Đúng ra bạn dùng hàm STRTRAN thì gọn hơn.
      Nhưng mẫu code bạn đưa ra chưa chính xác nên có thể sẽ ra kết quả không đúng!
      Lưu ý: stringin có chiều dài stringout thì kết quả mới đúng

  12. À 1 thằng thui vì thằng kia chỉ đảo chuỗi…hihihi🙂

  13. Đa tạ hiền huynh nhiều lắm,ngu đệ do ham vui-ham nghịch ủa quên “ham học” nên dịch ngược 1 chương trình chơi cho vui ( vì hàm trên mã hóa cho seri đĩa cứng,main,từa lưa hết…) mà đệ thì mù mờ về IT…Thanks again!🙂

  14. Bác Thanh ơi câu lệnh convert biến file dbf thành file mem và ngược lại như thế nào bác?

    • Lưu bộ nhớ vào file: SAVE TO temp
      Đưa ngược lại file vào bộ nhớ máy: RESTORE FROM temp ADDITIVE
      ========================================================
      Hoặc:
      SELECT Customer
      SCATTER NAME oCustomer
      SELECT CreditHistory
      SCATTER FIELDS ReportDate, Rating NAME oCustomer ADDITIVE

  15. Cái này thì em chịu, có cái tool không các bác ơi,

  16. Cú pháp thế nầy phải không bác?
    SAVE TO |TO MEMO [ALL LIKE|ALL EXCEPT ]
    RESTORE FROM |FROM MEMO [ADDITIVE]

  17. Mạn đàm về sse.Bác Thanh có để ý
    Ngày xưa sse 2011,2012 đổi tên cty … chỉ cần đánh nguyên cái tên tiếng việt vào file sse.dbf,sau đó chỉ cần xuất 1 cái báo cáo nào đó có tên đơn vị ra file excel (tên đv sẽ bị mã hóa) ,sau đó copy cái tên đơn vị mã hóa đó vào lại file sse là được.

  18. À nhờ bác gởi PM giải mã vào mail của laogiahamvui nhe.Thanks

  19. Bác Thanh ui!Tool vba Zero Edit DBF bác làm nhiều thủ thuật quá nhỉ,còn thằng Zero0x@DecodeFile bác ẩn mấy cái nút chức năng mã hóa các file thành file zero uổng vậy,không show cho ACE xài luôn? :)…Đoán mò thui Bác Thanh đừng cười laogiahamvui nay nhe…..

    • 1. Zero Edit DBF: Thường thì excel muốn truy vấn DBF ngoài cái ODBC còn cài cái gì nữa đó, nên thôi chuyển thư viện vb6 cho gọn.
      2. Zero0x@DecodeFile: Lão nói đúng, nút ,mã hóa vẫn còn nằm trong đó, nhưng thiết nghĩ chẳng ai có nhu cầu nên cũng chẳng show chi cho rối.

  20. Bác nào có PM Quản lý bán hàng của sse không à? Share cho em với. Rất cảm ơn!

  21. Phần mềm kế toán SA2013.FV1 cũng làm theo cách này được sư phụ à. Thật là hay.
    SA2013.FV1: http://www.mediafire.com/?nh5g8be463brqnb

  22. Gửi Bác Thanh,
    Đến giờ này em cũng chưa biết đổi tên thế nào nữa, chắc bó tay rồi.
    Khi em vào báo cáo xuất excel phần mềm báo lỗi: file ‘ rp2ex.prg’ does not exits
    Các bác giúp em,

  23. – Không hiểu sao khi sử dụng file mẫu vba excel kích vào fom Update to DBF thì nó hiện thông báo lỗi này:

    Không thể cập nhật
    Lỗi số: 40002
    IM001: [Microsoft] [ODBC Driver Manager] Driver does not support this function

    – Rồi trường hợp dùng file mẫu mã hóa tên và chép tên mã hóa đó vào file DBF gốc của phần mềm thì OK (với điều kiện tên ko dấu. VD: ime_typn) còn ghi có dấu như: Hồng Phạm Thanh Quốc thì bị lỗi, nhìn ko ra…

    Lão hoada200000 có bị vậy ko?

    Sư phụ xem giúp đệ với…..

  24. Đã tải lại file setup và “tất cả đã được giải quyết”. Thanks sư phụ.

    Không biết cách này có áp dụng được với các phần mềm khác của sse không? để nhân tiện đệ làm phát xem sao…. hắc, hắc,…

  25. Báo cáo luôn: SI2012.FV5.0; SA2013.FV1.0 => OK

    Easy sale 2012.FV2.0; SIM2011.FV2 => Ko được.

    Cũng là phần mềm miễn phí mà sao cách đổi tên lại khác nhau sư phụ nhể?

  26. Các bác khoái sse vì nó giống Fast mà lại free…mà sse là thằng copy code của Fast rồi chỉnh lại,mà đã là copy thì kg thể bằng Fast được.Việc đổi tên Bác phamhqthanh đã làm đồ nghề chuẩn hết rồi các bác phải chịu ngâm kíu đi chứ!Các phần mềm của sse nếu kg đổi tên được bằng đồ nghề của Bác phamhqthanh thì làm như cách cùi bắp mà tôi đã nói(Vì các sse đời nầy mã hóa cùi bắp lắm).Đừng đày ải Bác phamhqthanh quá…

  27. Ngộ cũng định thử test theo cách của laogiahamvui nói xem thế nào, nhưng khổ thằng sse kết xuất ra excel toàn bị báo lỗi ko kết xuất được mừ. Đúng là copy lại rồi chỉnh sửa thật!!!.

  28. Kết xuất ra excel bị lỗi, các bác giúp nhé

  29. Sư phụ ơi, tiện thể thằng này liên quan đến Fast cho đệ nhờ sư phụ xử lý chỗ này giúp đệ với:

    Tình hình là sau khi cài đặt fast 10.1r3 trên win7, đăng ký bằng file smsm18.fxp, xong rồi fix lỗi bằng file Assistant_registry_FA bổ sung những file bị đăng ký thiếu và mở chương trình lên thì hiện thông báo này (đệ ko đưa hình lên đây được):

    Program Error

    OLE IDispatch exception code 0 from RTFA2010R0709: Type mismatch…

    Cancel Suspend Ignore Help

    Đệ bấm Suspend & Ignore liên tục để thoát ra và nó lại hiện lên thông báo này nữa:

    Loi chuong trinh
    Variable ‘TXT’ is not found

    Lỗi chương trình: SMSTARTUP.FXP
    Thủ tục: SMSTARTUP
    Dòng: 0
    Mã lỗi: 12

    Gửi thư In lỗi Kết thúc

    Thế là em bấm kết thúc luôn.

    • Chào bạn imetypn!
      Tôi đã từ bỏ mọi thứ liên quan đến phần mềm kế toán Fast, những gì còn lưu lại ở blog này chỉ là vấn đề thời gian.
      Những thắc mắc liên quan đến phần mềm kế toán Fast bạn vui lòng liên hệ bộ phận hỗ trợ kỹ thật của công ty cp Fast.
      Liên quan đến vấn đề trên, tôi chỉ gợi ý cho bạn 1 tí: file smsm18.fxp của bạn bị lỗi, bạn cố gắng tìm file gốc chép vào đúng vị trí và tiến hành đăng ký lại.
      Best regards!

  30. Hic, hic,.. Thanks sư phụ, đệ đang làm lại đây…

  31. Dạ! Em tải về bị lỗi font chữ, phải làm sao ạ. Mấy anh chị giúp dùm em ạ!

  32. Anh anh cho em xin file excel đổi tên fast 10.2 với dc ko anh?
    em có tải file mẫu SIM2011.FV2 nhưng ko biet làm sao sửa về cho fast dc. em cám ơn!

  33. Cho mình xin pm Zero0x@DecodeFile với

  34. em muốn xin file Zero0x@DecodeFile bác nào có em xin với mail ngoctrung2us@gmail.com . em xin cảm ơn

  35. Xin hỏi Bác Thanh là em cài Simba rồi, cũng đổi tên doanh nghiệp xong. Nhưng khi in chứng từ thì vẫn có tiêu đề:
    Tên đơn vị: Simba Demo 2013. Công ty TNHH ABC
    Xin hỏi Bác làm sao xóa được chữ “Simba Demo ” đi ạ.
    Em cám ơn nhiều

  36. em muốn xin file Zero0x@DecodeFile bác nào có em xin với mail trancongvan81@gmail.com . em xin cảm ơn

  37. xin chào các anh/ chị ,vui lòng cho mình xin file Zero0x@DecodeFile với mail của mình là : thaihuuloc@gmail.com.Mình tìm trên google mà không thấy , xin cám ơn.

  38. bác thanh ơi, cho em ch trình giải mã file .zero vào datt37@gmail.com với

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: