Cong ty Cong Nghe Tin hoc Nha truong http://www.schoolnet.vn
Mô hình mã hoá học sinh trong Nhà trường Phổ thông
07/01/2006

Một trong những vấn đề chính cần thực hiện trong các phần mềm quản lý nói chung và nhà trường nói riêng là các bài toán liên quan đến mã hóa thông tin. Trong bài viết này tôi muốn nói về một trong những bài toán mã hóa rất quan trọng trong mô hình quản lý nhà trường, đó là vấn đề mã hóa HọC SINH (và GIáO VIÊN). Đồng thời bài viết sẽ trình bày một phương án giải quyết cụ thể áp dụng trong phần mềm Quản lý Học tập Nhà trường SCHOOL VIEWER của công ty School@net. Phần mềm này hiện đang được sử dụng rộng rãi tại nhiều nhà trường phổ thông trên cả nước.
A. Về bài toán mã hóa học sinh trong các phần mềm quản lý nhà trường
Thoạt nhìn bài toán mã hóa Học sinh & Giáo viên trong nhà trường chỉ là một trường hợp riêng của mô hình quản lý nhân sự và do đó dễ gây cảm tưởng rằng đây là một việc đơn giản. Bài toán này quả thật đơn giản nếu chúng ta chỉ hạn chế phần mềm quản lý Học sinh & Giáo viên khép kín trong phạm vi một nhà trường. Tuy nhiên một mô hình quản lý được áp dụng chung cho nhiều trường và dùng trong nhiều năm học. Mỗi học sinh sẽ ngồi trên ghế nhà trường tối thiểu 12 năm, còn giáo viên có thể sẽ gắn bó với nhà trường vài ba chục năm. Mục đích cao nhất của phần mềm là quản lý được việc HọC của học sinh và DạY của giáo viên ở qui mô một Tỉnh/Thành phố hoặc Quốc gia và kéo dài trong nhiều năm. Do vậy bài toán được đặt trong khung cảnh mới vừa nêu sẽ trở nên, thậm chí, vô cùng phức tạp. Chia sẻ với bạn đọc các ý tưởng, quan niệm về bài toán này chính là mục đích với người viết. Nếu bạn đọc không quan tâm hoặc nghĩ rằng bài toán mã hóa học sinh trong nhà trường là đơn giản không có gì phải bàn đến thì bạn hãy chịu khó đọc tiếp một chút thôi bạn sẽ thấy đây là một bài toán lớn cần suy nghĩ cẩn thận trước khi bắt tay vào làm thật sự.
Có 2 cách tiếp cận với bài toán mã hóa này:
1. Hệ thống mã hóa hoàn toàn do con người tạo lập bằng tay không phụ thuộc vào công nghệ và phần mềm sử dụng. Tạm gọi cách tiếp cận này là MANUAL.
2. Hệ thống mã hóa được thiết kế bằng các thuật toán cụ thể và do phần mềm máy tính tạo ra một cách tự động. Cách làm này tạm gọi là AUTOMATICS.
Hai cách làm trên mặc dù là hoàn toàn khác nhau về quan niệm và phương thức thực hiện tuy nhiên chúng có cùng mục đích và bản chất công việc.
- Với cả 2 cách làm trên mục đích cuối cùng là tạo ra và cung cấp cho mỗi HọC SINH (hoặc GIáO VIÊN) một 'mã số' đặc trưng riêng cho Học sinh này. Mã số này thường là một dãy ký tự hoặc chữ, hoặc số hoặc bao gồm cả chữ và số. Hai học sinh khác nhau phải được cấp các mã số khác nhau.
- Điểm khác biệt chính giữa 2 phương án trên là ở chỗ Ai là người tạo ra các 'mã số' cụ thể dựa trên các thông số ban đầu và thuật toán đã thiết kế. Với cách làm MANUAL thì con người sẽ phải tự tính toán và tạo ra mã số, còn trong phương án 2, AUTOMATICS thì chương trình phần mềm sẽ tự động sinh ra các mã số này.
Cả hai cách làm trên đều phải tuân thủ các yêu cầu cơ bản của việc mã hóa thông tin phục vụ cho các nhu cầu quản lý mà chúng ta sẽ bàn ngay sau đây.

B. Các vấn đề và yêu cầu cơ bản của mã hóa học sinh
Trong phần này tôi sẽ trình bày các vấn đề chính phát sinh khi thiết kế việc mã hóa HọC SINH và GIáO VIÊN trong nhà trường trong mô hình bài toán quản lý nhà trường. Trên thực tế việc quản lý Học sinh khác với quản lý Giáo viên tuy nhiên các vấn đề kỹ thuật phát sinh thì khá giống nhau.
1. Vì sao cần thiết mã số Học sinh ?
Có lẽ câu hỏi này không cần nhiều giải thích. Mã số có nhiệm vụ chính là nhận dạng và phân biệt các học sinh khác nhau. Tất cả các thông tin thường được sử dụng của một học sinh như Họ tên, Ngày sinh, Giới tính, Quê quán,... đều dễ trùng lặp nhau. Ngay trong một lớp học tình trạng trùng tên và họ của hai học sinh vẫn hay xảy ra. Trong những trường hợp như vậy các bạn học sinh trong lớp thường đưa thêm các bí danh khác để phân biệt ví dụ như Hùng gầy, Bình bò,... Rõ ràng mã số của mỗi học sinh là rất cần thiết đặc biệt là trong các phần mềm, chương trình quản lý. Vấn đề chỉ là chúng ta sẽ mã hóa như thế nào mà thôi.
2. Tính duy nhất của mã số và phạm vi thực hiện công việc quản lý ?
Một trong những điều kiện đầu tiên cần phải thỏa mãn của mã số là tính duy nhất của mã số trong phạm vi quản lý. Không được phép có 2 học sinh với cùng mã số. Tính duy nhất thì khỏi phải bàn nhưng phạm vi áp dụng mô hình lại là một vấn đề lớn. Nếu chúng ta chỉ cần đánh mã số duy nhất cho học sinh trong một nhà trường thì vấn đề trở nên khá đơn giản. Ví dụ với số lượng học sinh khoảng 5000 chúng ta sẽ dùng 4 chữ số để đánh số toàn bộ học sinh mà không phải lo lắng điều gì nữa. Tuy nhiên khi vấn đề đặt ra là cần quản lý học sinh trên địa bàn một Quận/Huyện, thậm chí một Tỉnh/Thành phố hay Quốc gia thì vấn đề hoàn toàn không đơn giản. Phạm vi quản lý ở đây không chỉ giới hạn không gian địa lý mà không kéo dài theo thời gian: chúng ta muốn quản lý cả quá trình học tập của một học sinh trong thời gian học trong một nhà trường, khoảng 4-5 năm, hay có thể quản lý suốt cả 12 năm phổ thông, thậm chí muốn quản lý kho thông tin lưu trữ hàng chục năm, hàng trăm năm? Vấn đề bây giờ sẽ trở nên vô vùng phức tạp. Chúng ta hãy thử cùng nhau xem xét vấn đề này một cách chi tiết hơn để xem sự phức tạp của chúng tới đâu:
- Trước tiên chúng ta thử làm một phép tính xem có tổng cộng bao nhiêu học sinh phổ thông (nhấn mạnh: học sinh phổ thông chứ không phải là toàn dân) phải quản lý. Hàng năm chúng ta thường xuyên có khoảng 20 triệu học sinh, mỗi năm số lượng các em vào Tiểu học khoảng 2 triệu. Như vậy sau 50 năm chúng ta sẽ có một kho dữ liệu khoảng 120 triệu học sinh. Đây là một con số khổng lồ tuy nhiên nếu chỉ dùng các chữ số từ 0 đến 9 chúng ta sẻ chỉ cần đến một mã số độ dài 9, 10 ký tự mà thôi, một con số chấp nhận được. Tuy nhiên cách làm này không thể khả thi vì không có ai có thể 'đếm' được số học sinh nhập học trên cả nước theo thứ tự tăng dần!
Một cách tiếp cận nữa, chúng ta sẽ phân bổ việc kiểm soát học sinh theo khu vực, thậm chí theo từng trường với suy nghĩ rằng trong mỗi nhà trường việc 'đếm' học sinh nhập học là tương đối khả thi. Hệ thống mã hóa sẽ phải mang đầy đủ thông tin của một cây thư mục có dạng sau:

Hình 1: mô hình cây thông tin quản lý nhà trường
Ví dụ với mô hình trên việc phân cấp mã hóa đã trở nên rất sáng sủa. Toàn bộ thông tin trên cây thư mục trên sẽ được mã hóa và quản lý thống nhất cấp Bộ, thông tin của từng học sinh trong nhà trường sẽ được quản lý ở cấp cơ sở, cấp trường. Tuy nhiên mô hình trên có một nhược điểm có thể thấy ngay rằng trong thông tin mã số của học sinh sẽ phải lưu trữ khá nhiều các thông tin phân cấp quản lý từ cấp Bộ đến cấp Nhà trường và các thông tin này có lẽ không thật sự có ý nghĩa lắm trong thông tin mã hóa học sinh.
- Ta hãy xét cách tiếp cận mới không cần dùng thông tin phân cấp để mã hóa học sinh mà hãy sử dụng càng nhiều càng tốt các thông tin đặc thù của từng học sinh. Ví dụ các thông tin có thể sử dụng để mã hóa: Họ tên, Ngày sinh (có thể chỉ năm sinh), Nam nữ, Quê quán, Dân tộc,... Đây thực sự là những thông tin bổ ích và đặc thù cho mỗi học sinh và rất có lý khi mã hóa chúng để đưa vào mã học sinh. Ta hãy thử phân tích sâu hơn một chút:
Nếu sử dụng Họ tên đầy đủ của học sinh để mã hóa, đây là một thông tin đặc thù khá tốt (mặc dù trong nước ta có rất nhiều người trùng nhau cả họ đệm và tên). Tuy nhiên cách làm này chắcchắn sẽ tốn không gian mã hóa và sẽ rất khó tối ưu mã. Một cách khác là sử dụng thời gian sinh ra (ngày sinh) để làm thông tin đầu vào. Về nguyên tắc máy tính sẽ kiểm soát đến từng giây đồng hồ. Giả sử chúng ta có thể biết được thời gian sinh của mỗi chúng ta chính xác đến giây. Khi đó trong khoảng thời gian 100 năm sẽ có 60(s)x60(m)x24(h)x365(d)x100(y) = 3153600000 giây (hơn 3 tỷ) trôi qua. Con số này không lớn và về nguyên tắc có thể dùng để mã hóa rất tốt giờ sinh của bạn. Tuy nhiên sự khó khăn của cách làm này là tính không khả thi vì không thể nhập liệu chính xác được.
- Một cách làm nữa là sử dụng một số thông tin đầu vào (không cần quá đầy đủ) và dùng các thuật toán mạnh sinh ra các mã số ngẫu nhiên, ví dụ thuật toán md5 chẳng hạn. Đây là một cách làm khá tốt và chắc chắn tuy nhiên thuật toán này chỉ là một chiều và yêu cầu không gian sinh mã quá lớn không phù hợp.
3. Độ dài, cách thể hiện mã số và các tiện ích sử dụng ?
Một trong những vấn đề rất quan trọng của việc mã hóa là bản thân cách thể hiện đầu ra của hệ thống mã này. Về lý thuyết để đảm bảo các yếu tố duy nhất như đã trình bày ở trên chúng ta có thể kiến tạo một mã số học sinh có dạng sau:
Dgdjhgdju e872be82db2dnj2de3dn2idmd2i0932r2mdl2j
Một mã học sinh quá dài và rắc rối như vậy tất nhiên không phải là một mã tốt. Ta hãy xem một kiểu thể hiện mã khác:
073892178298273930183901
Kiểu mã toàn số như vậy cũng khó có thể là khóa tốt vì nó quá khó nhớ và rất 'khô khan'.
- Thứ nhất mã số học sinh không thể là một dãy ký tự quá dài. Mã số quá dài sẽ làm cho việc quản lý mã trở nên nặng nề và đặc biệt mã số này không thể dùng vào các công việc khác.
- Mã số học sinh phải được thể hiện sao cho có thể nhớ được. Một dãy trên 10 chữ số là rất khó nhớ trong khi đó một dãy chữ cái có thể dễ nhớ hơn.
- Như vậy không quá dài và dễ nhớ là các yếu tố rất quan trọng của thể hiện mã số học sinh. Tất nhiên như trên đã trình bày để đảm bảo tính quản lý chặt chẽ thì rất khó thiết kế một mã học sinh đủ ngắn được.
4. Tính tối ưu của thuật toán mã hóa ?
Tính tối ưu của thuật toán mã hóa được thể hiện ở hai đặc thù sau:
1- Thuật toán phải nhanh và chính xác. Điều kiện này là rất quan trọng vì nếu thời gian mã hóa chậm sẽ ảnh hưởng đến tiến độ nhập liệu của phần mềm. Mặt khác thuật toán mã hóa phải có cơ chế tự kiểm tra lỗi và tự động điều chỉnh.
2- Thông tin mã hóa có thể tra cứu ngược (2 chiều). Điều kiện này không phải là bắt buộc với mọi hệ thống mã hóa tuy nhiên việc tra cứu ngược một phần của thông tin học sinh cũng là một yếu tố xác định tính hợp lý của thuật toán được dùng.

C. Phương án mã hóa SVC (School Viewer Coding)
Như các bạn đã thấy, công việc mã hóa học sinh, giáo viên trong bài toán quản lý nhà trường là khá phức tạp (và cần thiết). Bây giờ tôi sẽ trình bày phương án mã hóa đã được áp dụng trong phần mềm School Viewer, phần mềm quản lý Học tập nhà trường đang được dùng khá phổ biến tại nhiều trường phổ thông trên cả nước.
1. Một số cơ sở và ý tưởng của thuật toán
Sau đây là một số ý tưởng ban đầu và cơ sở toán học của thuật toán SVC.
- Mục đích chính của thuật toán là dựa vào một số thông tin ban đầu (không nhiều lắm) của học sinh và nhà trường để tạo ra một mã học sinh duy nhất trên qui mô toàn quốc và có giá trị trong khoảng 100 năm.
Đây là mục tiêu đặt ra ban đầu khá mạnh vì phần mềm School Viewer mong muốn quản lý được học sinh liên thông giữa các nhà trường trên phạm vi cả nước. Do vậy thông tin mã hóa học sinh sẽ không bao gồm các thông tin mã hóa quản lý trong mô hình cây thư mục đã nêu ở phần đầu của bài viết này.
- Thông tin mã hóa phải không quá dài và dễ nhớ để có thể sử dụng được mã số này với nhiều mục đích khác. Ví dụ dùng mã này có thể làm mật khẩu để truy nhập vào dữ liệu điểm của nhà trường, cấp sở hay quốc gia để tra cứu điểm,...
- Đầu vào của học sinh bắt buộc phải dùng các thông tin phân cấp như Tỉnh-Thành phố, Quận-Huyện,...Thông tin này có thể lấy từ thông tin quản lý của nhà trường một cách dễ dàng.
- Để có thể mã hóa được họ tên học sinh thuật toán đã dựa vào một cơ sở thực tế rất quan trọng sau đây liên quan đến ngôn ngữ tiếng Việt của chúng ta:
a) Mặc dù ngôn ngữ Việt của chúng ta rất phong phú tuy nhiên số lượng các âm (từ đơn) có nghĩa lại không nhiều. Theo thống kê của các cơ quan nghiên cứu thì số lượng âm vực có nghĩa của tiếng Việt chỉ là khoảng 8000 từ. Trên thực tế hầu như toàn bộ người Việt ta đều dùng các âm từ trong số 8000 từ trên để đặt tên cho mình. Kết quả nghiên cứu này thật xuất sắc và chúng tôi đã sử dụng chúng rất hữu hiệu trong việc thiết kế thuật toán mã hóa học sinh của mình.
b) Người Việt chúng ta được đặt tên có họ truyền từ người cha sang. Thực tế cho thấy số lượng các tên họ của chúng ta cũng không nhiều. Theo thống kê số lượng các họ hay dùng tại Việt Nam chỉ nằm trong khoảng 500. Đây cũng là một thông tin rất bổ ích cho việc có thể áp dụng cho công việc mã hóa học sinh lấy thông tin từ họ tên học sinh.
- Theo kinh nghiệm của chúng tôi mã số học sinh (hay nói chung tất cả các loại mã) chỉ nên dùng các chữ cái in hoa kết hợp với các chữ số. Đây có lẽ là một kết hợp tối ưu hơn cả (nếu dùng toàn số hoặc dùng cả chữ in hoa, in thường lẫn lộn làm cho mã khó nhớ và rắc rối nhiều). Một cơ sở nữa để tạo mã là số các ký tự mã hóa nên là một hợp số để dễ dàng tách thành các nhóm nhỏ. Ví dụ 12 ký tự có thể tách làm 3 nhóm mỗi nhóm 4 ký tự hoặc tách làm 4 nhóm mỗi nhóm 3 ký tự. Việc tách này làm cho mã số trở nên dễ nhớ hơn nhiều lần. Tránh dùng các mã số với 11, 13 hay 17 ký tự liền nhau. Chắc các bạn cũng thấy hầu hết các License Key của các phần mềm trên thế giới đều tuân thủ nguyên tắc này.
2. Bộ mã ký tự 32 bit của SVC
Bộ ký tự dùng cho kiểu mã hóa SVC bao gồm 32 ký tự là các chữ số và bộ chữ cái in hoa rút gọn, phù hợp với bảng chữ cái tiếng Việt (Tiếng Anh bỏ đi F, J, W, Z) có dạng sau:

Bảng 1: bảng chữ cái của mã SVC.
Với bảng chữ cái này, 5 bits = 1 chữ cái.
Như vậy để mã hóa bởi 12 ký tự, chúng ta cần lượng thông tin là 5 x 12 = 60 bits, nếu mã hóa cần 15 ký tự chúng ta cần lượng thông tin 5 x 15 = 75 bits.
Phương án mã hóa của SVC sẽ dùng 12 ký tự với khuôn dạng XXXX-XXXX-XXXX. Khuôn dạng này là khá hợp lý đối với học sinh phổ thông của chúng ta, không quá dài và có thể nhớ được vì toàn dùng chữ cái in hoa tiếng Việt và các số.
Như vậy thông tin nhập vào sẽ phải là 60 bits.
3. Thông tin đầu vào và thuật toán của SVC
Sau đây là mô tả thông tin đầu vào của mã hóa theo SVC.
a. Ngày sinh - 16 bits
Ngày sinh của học sinh/giáo viên được tính như một số nguyên là số ngày tính từ năm 1925.
Số lượng ngày cho phép tính là 175 năm (1925-2099) là 175 x 365 =63875 ằ 2 bytes (16 bits). Chương trình sẽ sử dụng 16 bits = 65,536 để mã hóa thông số này.
Chú ý: trường hợp học sinh không nhớ chính xác ngày sinh thì chương trình sẽ tự động gán giá trị ngày ngẫu nhiên để làm thông tin mã hóa.
b. Nam/Nữ - 1 bit
Sử dụng 1 bit cho thông số này.
c. Mã hóa theo Họ cha của Học sinh - 9 bits
Phần họ của học sinh được tách ra và mã hóa theo một CSDL lưu các Họ thường gặp của người Việt Nam. Dự kiến toàn bộ các họ Việt Nam sẽ không quá 512. Chúng ta sẽ dùng 9 bits để mã hoá giá trị này của Học sinh. Trường hợp khi nhập họ học sinh không có trong bảng này, chương trình sẽ tự động nạp tên này vào bảng tại vị trí cuối cùng. Trường hợp bảng đã đủ 512 bản ghi mà họ học sinh không tìm thấy trong bảng thì máy sẽ gán một giá trị ngẫu nhiên 9 bits cho giá trị này.
d. Mã hóa theo tên học sinh - 13 bits
Phần tên học sinh (sau khi đã loại đi Họ + đệm) sẽ được mã hóa theo một CSDL lưu các tên chuẩn của người Việt Nam. Tổng số lượng tên người Việt dự đoán không quá 8,192 = 13 bits.
Chú ý: trường hợp khi nhập dữ liệu tên không có trong bảng CSDL thì chương trình sẽ tự động nạp tên này vào bảng tương ứng tại vị trí cuối cùng.
e. Mã Quận/Huyện của nhà trường hiện thời - 10 bits
Hiện tại số Quận/Huyện trên cả nước là 634, chúng ta sẽ sử dụng 10 bits = 1024 để mã hóa thông tin này.
f. Chỉ số địa phương của Nhà trường (SchoolLocalID) - 6 bits
Đây là vị trí duy nhất hơi 'phức tạp' của thuật toán SVC. Tham số này được điều khiển bởi chính phần mềm hoặc do các phòng giáo dục quản lý. Mỗi nhà trường sẽ được gán với một giá trị Chỉ số Địa phương duy nhất ( SchoolLocalID) nhằm phân biệt các nhà trường cùng cấp trong cùng một Quận/Huyện. Với mỗi loại nhà trường trong một Quận/Huyện sẽ được cấp một chỉ số địa phương duy nhất đánh số từ 1 đến 64.
g. Tham số Checksum: 5 bit
- Có 32 giá trị (5 bits) để tạo tham số phòng hờ sự cố khi sử dụng 6 tham số trên tạo ra các mã trùng nhau trong một trường (tại thời điểm sinh mã học sinh/giáo viên). Khi đó Checksum sẽ tự động tăng lên 1 giá trị.
Tổng kết lại chúng ta cần:
(1 - Ngày sinh) = 16 bits
(2 - Nam Nữ) = 1 bit
(3 - Họ cha) = 9 bits
(4 - Tên) = 13 bits
(5 - Quận/Huyện) = 10 bits
(6 - Chỉ số địa phương) = 6 bits
(7 - Check Sum) = 5 bit
Tổng cộng = 60 bits = 12 ký tự
Chú ý:
Toàn bộ các thông tin cần thiết để mã hoá một Học sinh / Giáo viên đều là những thông số bắt buộc cần phải biết của một nhà trường. Các thông tin của Nhà trường như SchoolLocalID, Mã Quận/Huyện, Mã Tỉnh đều được cấp chính xác ngay khi cài đặt phần mềm.
Trường hợp sau khi thực hiện các bước mã hóa từ (1) đến (7), vẫn bi trùng lặp mã thì chương trình sẽ lấy năm sinh của học sinh thay thế bằng năm 2100, như vậy chúng ta có thêm 32 checksum bổ sung. Giả sử lại vẫn trùng chúng ta lại sử dụng thêm các năm 2101 và 2102 với tổng cộng 96 checksum bổ sung. Việc sử dụng năm 2100, 2101 và 2102 không phá vỡ tính duy nhất của thuật toán bởi vì với năm 2102, chúng ta đã dùng đến 178 năm x 365 = 64970 vẫn nằm trong phạm vi kiểm soát của 16-bits.

D. Kết luận
Như các bạn đã thấy một bài toán nhỏ nhưng khi đi sâu vào nghiên cứu và áp dụng trên thực tế thì thật không đơn giản. Thuật toán như tôi đã trình bày ở trên không phải là tối ưu hoàn toàn và không phải là 100% không lỗi. Tuy nhiên với các phân tích vừa trình bày ở trên đây là một thuật toán khá hữu hiệu vì nó đơn giản, dễ dàng lập trình, thông tin mã hóa 2 chiều. Và điều quan trọng nhất thuật toán này đảm bảo tính duy nhất của mã hóa tự sinh trên máy tính trên phạm vi cả nước và kéo dài 100 năm.
Mọi ý kiến và trao đổi các bạn có thể gửi cho tôi theo email: habv@school.net. Chúc các bạn một năm mới sức khỏe và thành đạt.

URL của bài viết này::http://www.schoolnet.vn/modules.php?name=SVR&file=article&sid=19
© Cong ty Cong Nghe Tin hoc Nha truong contact: sales@schoolnet.vn