CÔNG NGHỆ THÔNG TIN >> BÀI VIẾT CHỌN LỌC

Sinh mã số kế tiếp dựa vào một mẫu cho trước bằng C# hoặc Java

Đăng lúc: 10:47 AM - 22/12/2023 bởi Charles Chung - 556

Trong bài viết này tôi sẽ hướng dẫn các bạn viết hàm sinh mã kế tiếp dựa vào mẫu cho trước, code với java và c#

Giới thiệu

Trong hầu hết các cơ sở dữ liệu quan hệ (RDBMS) đều hỗ trợ tính năng sinh mã tự động, tuy nhiên nó chỉ hỗ trợ kiểu dữ liệu số nguyên (int). Trong một số trường hợp, các ứng dụng yêu cầu sinh mã theo một mẫu nào đó ví dụ:

  • HD20230209-001 (Mã được nối bởi từ HD với chuỗi năm tháng ngày và 3 ký tự cuối là số thứ tự)
  • SP0001234 (Mã được nối bởi từ SP với 6 ký tự cuối là số thứ tự)
  • Và còn nhiều dạng khác

Trong bài này tôi sẽ hướng dẫn các bạn sử dụng code C# hoặc Java để sinh ra mã kế tiếp dựa vào mẫu cho trước SP000001 (Mã được nối bởi từ SP với 6 ký tự cuối là số, mã sau lớn hơn mã trước 1 đơn vị)

Ví dụ với C# và Java

Code với C#

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 internal class Program
    {
        /// <summary>
        /// Phương thức sinh ra mã kế tiếp
        /// </summary>
        /// <param name="PrefixLengthString">Độ dài chuỗi ở đầu mã số (ví dụ: SP thì nhập vào là 2)</param>
        /// <param name="id">Mã số hiện tại (ví dụ: SP000234)</param>
        /// <returns>Trả về mã kế tiếp của id (ví dụ: SP000235)</returns>
        public static string GenerateNextId(int PrefixLengthString, string id)
        {
 
            //cắt ra phần số
            string strnumber = id.Substring(PrefixLengthString);
            //chuyển chuỗi thành số
            int number = 0;
            if (!int.TryParse(strnumber, out number))
                return "Convert string to number fail, please check input parameters!";
            //tăng số lên 1 đơn vị
            number++;
            //lấy độ dài của số sau khi tăng 
            int length = number.ToString().Length;
            if (length > strnumber.Length)
                return "Out of numbers to generate codes , please check input parameters!";
            //lấy độ dài chuỗi số ban đầu
            int lengthOrigin = id.Length - PrefixLengthString;
            //xử lý thêm số 0 vào phía trước
            string result = "";
            for (int i = 0; i < lengthOrigin - length; i++)
            {
                result += "0";
            }
            //nối số không với số đã tăng lên
            result += number.ToString();
            //lấy phần ký hiệu ở đầu mã số
            string prefix = id.Substring(0, PrefixLengthString);
            //nối ký hiệu đó với chuỗi số đã tăng
            return prefix + result;
        }
        static void Main(string[] args)
        {
            //kiểm tra thử
            Console.WriteLine(GenerateNextId(2, "SP000000"));//->SP0000001
            Console.WriteLine(GenerateNextId(2, "SP001235"));//-> SP001236
            Console.WriteLine(GenerateNextId(2, "SP009999"));//->SP010000
            Console.WriteLine(GenerateNextId(1, "SP001235"));//lỗi convert do tham số độ dài truyền sai
            Console.WriteLine(GenerateNextId(2, "SP999999"));//hết số
            Console.WriteLine(GenerateNextId(6, "SP000099"));//hết số do tham số độ dài truyền sai
        }
    }

 

Kết quả

 

 

Code với Java

 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public class Program {
	/**
	 * 
	 * @param PrefixLengthString:độ dài chuỗi ở đầu mã số (ví dụ: SP thì nhập vào là 2)
	 * @param id: mã số hiện tại (ví dụ: SP000234)
	 * @return Trả về mã kế tiếp của id (ví dụ: SP000235)
	 */
    public static String GenerateNextId(int PrefixLengthString, String id)
    {

        //cắt ra phần số
        String strnumber = id.substring(PrefixLengthString);
        //chuyển chuỗi thành số
        int number = 0;
        try{
        	number=Integer.parseInt(strnumber);
        }catch(Exception ex){
            return "Convert string to number fail, please check input parameters!";
        }
        //tăng số lên 1 đơn vị
        number++;
        //lấy độ dài của số sau khi tăng 
        int length = String.valueOf(number).length();
        if (length > strnumber.length())
            return "Out of numbers to generate codes , please check input parameters!";
        //lấy độ dài chuỗi số ban đầu
        int lengthOrigin = id.length() - PrefixLengthString;
        //xử lý thêm số 0 vào phía trước
        String result = "";
        for (int i = 0; i < lengthOrigin - length; i++)
        {
            result += "0";
        }
        //nối số không với số đã tăng lên
        result += String.valueOf(number);
        //lấy phần ký hiệu ở đầu mã số
        String prefix = id.substring(0, PrefixLengthString);
        //nối ký hiệu đó với chuỗi số đã tăng
        return prefix + result;
    }
    public static void main(String[] args)
    {
        //kiểm tra thử
        System.out.println(GenerateNextId(2, "SP000000"));//->SP0000001
        System.out.println(GenerateNextId(2, "SP001235"));//-> SP001236
        System.out.println(GenerateNextId(2, "SP009999"));//->SP010000
        System.out.println(GenerateNextId(1, "SP001235"));//lỗi convert do tham số độ dài truyền sai
        System.out.println(GenerateNextId(2, "SP999999"));//hết số
        System.out.println(GenerateNextId(6, "SP000099"));//hết số do tham số độ dài truyền sai
    }
}

 

Kết quả

Bạn nào cần sinh mã theo mẫu nào cứ liên hệ thầy Charles Chung, code bằng mọi ngôn ngữ 

thay lời cảm ơn!

QUẢNG CÁO - TIẾP THỊ