Tìm quy luật của dãy số trong bảng.

Liên hệ QC
Tham gia
14/9/12
Bài viết
312
Được thích
68
Nghề nghiệp
VT
Em có một dãy số, em muốn tìm quy luật của con số cuối cùng
 

File đính kèm

  • Seri.xlsx
    538.6 KB · Đọc: 42
Theo tôi cái này được tạo như sau.

Trước hết người ta có số 19 chữ số, người ta tính checksum cho số đó. Để tính checksum thì người ta dùng thuật toán Luhn.

Cách làm như sau:
1. người ta nhân những chữ số ở vị trí lẻ với 2, và ở vị trí chẵn với 1. Nếu mỗi tích > 9 thì thay bằng tổng 2 chữ số của nó.
2. Tính tổng của các thành phần ở điểm 1.
3. Lấy modulo 10 của tổng ở điểm 2. Nếu kết quả <> 0 thì thay bằng (10 - kq). Đây là checksum.
4. ghi thêm checksum vào cuối để tạo số có 20 chữ số.

Khi có 20 chữ số thì người ta kiểm tra tính đúng đắn của nó (vì khi nhập tay vào văn bản có thể gõ nhầm) bằng cách tính checksum cho 19 chữ số đầu. Nếu checksum <> chữ số cuối thì cho là số 20 chữ số là sai.

Có rất nhiều con số trong cuộc sống cũng được tính bằng thuật toán tương tự, nhiều khi mỗi con số ở mỗi vị trí được gán cho những chữ số khác nhau, không hẳn là 2, 1 đan xen nhau. Khi tính được checksum thì người ta ghi thêm nó vào cuối. Khi cần kiểm tra tính đúng đắn của số thì người ta tính checksum và so sánh với chữ số cuối cùng.
----------
Kiểm nghiệm.
Công thức cho E2
Mã:
=MOD(-SUM(INDEX({2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2}*MID(B2;ROW($1:$19);1)-({2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2}*MID(B2;ROW($1:$19);1)>9)*9;0));10)

Ở VN thì thay dấu chấm phẩy trong công thức bằng dấu phẩy

Kết thúc bằng Enter, sao chép xuống dưới.

Để so sánh với cột D thì nhập công thức cho F2
Mã:
=IF(--D2<>E2;"KHONG KHOP";"")
Kết thúc bằng Enter, sao chép xuống dưới.
 
Lần chỉnh sửa cuối:
Dùng hàm Right như bạn là chuẩn rồi, cần gì quy luật khi con số cột A đã có thì cứ trích ra là được.
Nhưng con số ở cột A có thể gõ sai. Ý người ta là con số cuối đã được tính như thế nào. Nếu nó được tính theo thuật toán nào đó thì khi có số 20 chữ số thì có thể (99,9%) kết luận số đó đúng hay sai. :D

Ở Ba Lan có nhiều con số có chữ số cuối (checksum) được tính theo thuật toán dựa vào các chữ số đầu. Khi kiểm tra tính đúng đắn của số thì người ta tính checksum của các chữ số đầu và so sánh với chữ số cuối.

Vd. Tôi ký hợp đồng với anh A và tôi cung cấp PESEL (số điện tử công dân - 11 chữ số, chữ số thứ 11 là chữ số kiểm tra được tính theo thuật toán), nhưng tôi gõ sai 1 chữ số. Người ta có thể phát hiện ngay là PESEL sai, không có PESEL như thế.
-------
VIN (Vehicle Identification Number) ở Bắc Mỹ có ký tự thứ 9 là chữ số kiểm tra (Check digit) được tính theo thuật toán
 
Lần chỉnh sửa cuối:
Nếu thay
Mã:
=MOD(-SUM(INDEX({2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2}*MID(B2;ROW($1:$19);1)-({2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2}*MID(B2;ROW($1:$19);1)>9)*9;0));10)
bằng
Mã:
=MOD(-SUM(INDEX((MOD(ROW($1:$19);2)+1)*MID(B2;ROW($1:$19);1)-((MOD(ROW($1:$19);2)+1)*MID(B2;ROW($1:$19);1)>9)*9;0));10)
thì công thức ngắn hơn tí tẹo nhưng tôi vẫn thích công thức trên vì nhìn ngay ra các chữ số được gán cho những weight nào.
 
Dùng hàm Right như bạn là chuẩn rồi, cần gì quy luật khi con số cột A đã có thì cứ trích ra là được.
Dạ, bình thường thì trên sim sẽ có cả 20 chữ số, nhưng có trường hợp đã bị mờ, hoặc vì lý do nào đó mà không đọc được. Nếu tra cứu trên hệ thống chỉ xem được 19 số đó anh ạ. Trong trường hợp này có thể thay cái khác để biết số cuối cùng, nhưng nếu nhiều thì không thể.
Bài đã được tự động gộp:

Nếu thay
Mã:
=MOD(-SUM(INDEX({2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2}*MID(B2;ROW($1:$19);1)-({2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2}*MID(B2;ROW($1:$19);1)>9)*9;0));10)
.[/QUOTE]

Dạ. Em để ý thì cứ 10 số có đuôi lẻ thì lại chuyển sang 10 số có đuôi chẵn với khoảng cách là 2 đơn vị. Cứ 100 số thì khoảng cách là 4 đơn vị. Nhưng tìm hiểu mãi không hiểu. Còn dãy số là đúng ạ.
 
Lần chỉnh sửa cuối:
Dạ. Em để ý thì cứ 10 số có đuôi lẻ thì lại chuyển sang 10 số có đuôi chẵn với khoảng cách là 2 đơn vị. Cứ 100 số thì khoảng cách là 4 đơn vị. Nhưng tìm hiểu mãi không hiểu. Còn dãy số là đúng ạ.
Chính vì là dãy số đúng nên công thức trả về checksum (Check digit) đúng bằng chữ số cuối - E = D. Chú ý là công thức chỉ dùng 19 chữ số đầu và tự tính ra chữ số cuối.
 
Chính vì là dãy số đúng nên công thức trả về checksum (Check digit) đúng bằng chữ số cuối - E = D.
Vô cùng cảm ơn anh. Tuy chưa hiểu hết, nhưng đã biết cách áp dụng ạ. Lần nữa được cảm ơn anh ạ. Chúc anh và Diễn đàn có 1 ngày vui vẻ.
 
Web KT
Back
Top Bottom