ਲੁਹਨ ਅਲਗੋਰਿਦਮ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਨੰਬਰਾਂ ਦੀ ਪੁਸ਼ਟੀ ਅਤੇ ਤਿਆਰ ਕਰੋ, ਜੋ ਆਮ ਤੌਰ 'ਤੇ ਕਰੈਡਿਟ ਕਾਰਡ ਨੰਬਰਾਂ, ਕੈਨੇਡੀਅਨ ਸੋਸ਼ਲ ਇਨਸ਼ੋਰੈਂਸ ਨੰਬਰਾਂ ਅਤੇ ਹੋਰ ਪਛਾਣ ਨੰਬਰਾਂ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ। ਜਾਂਚ ਕਰੋ ਕਿ ਕੋਈ ਨੰਬਰ ਲੁਹਨ ਚੈਕ 'ਤੇ ਪਾਸ ਹੁੰਦਾ ਹੈ ਜਾਂ ਲੁਹਨ ਅਲਗੋਰਿਦਮ ਨਾਲ ਅਨੁਕੂਲ ਵੈਧ ਨੰਬਰ ਬਣਾਓ।
ਲੁਨ ਅਲਗੋਰਿਦਮ, ਜਿਸਨੂੰ "ਮੋਡੁਲਸ 10" ਜਾਂ "ਮੋਡ 10" ਅਲਗੋਰਿਦਮ ਵੀ ਕਿਹਾ ਜਾਂਦਾ ਹੈ, ਇੱਕ ਸਧਾਰਨ ਚੈਕਸਮ ਫਾਰਮੂਲਾ ਹੈ ਜੋ ਕ੍ਰੈਡਿਟ ਕਾਰਡ ਨੰਬਰਾਂ, ਕੈਨੇਡੀਅਨ ਸੋਸ਼ਲ ਇਨਸ਼ੋਰੈਂਸ ਨੰਬਰਾਂ, IMEI ਨੰਬਰਾਂ ਅਤੇ ਸੰਯੁਕਤ ਰਾਜ ਵਿੱਚ ਨੈਸ਼ਨਲ ਪ੍ਰੋਵਾਈਡਰ ਆਈਡੈਂਟੀਫਾਇਰ ਨੰਬਰਾਂ ਵਰਗੇ ਵੱਖ-ਵੱਖ ਪਛਾਣ ਨੰਬਰਾਂ ਦੀ ਪ੍ਰਮਾਣਿਕਤਾ ਦੀ ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ। ਇਹ ਕੈਲਕੁਲੇਟਰ ਤੁਹਾਨੂੰ ਲੁਨ ਅਲਗੋਰਿਦਮ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਨੰਬਰਾਂ ਦੀ ਪ੍ਰਮਾਣਿਕਤਾ ਦੀ ਪੁਸ਼ਟੀ ਕਰਨ ਅਤੇ ਲੁਨ ਚੈਕ ਪਾਸ ਕਰਨ ਵਾਲੇ ਮਾਨਯ ਨੰਬਰਾਂ ਨੂੰ ਤਿਆਰ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।
ਲੁਨ ਅਲਗੋਰਿਦਮ ਇਸ ਤਰ੍ਹਾਂ ਕੰਮ ਕਰਦਾ ਹੈ:
ਇੱਥੇ ਲੁਨ ਅਲਗੋਰਿਦਮ ਦਾ ਵਿਜ਼ੂਅਲ ਪ੍ਰਦਰਸ਼ਨ ਹੈ:
ਲੁਨ ਅਲਗੋਰਿਦਮ ਨੂੰ ਗਣਿਤੀ ਤੌਰ 'ਤੇ ਇਸ ਤਰ੍ਹਾਂ ਪ੍ਰਗਟ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ:
ਮੰਨ ਲਓ -ਵਾਂ ਅੰਕ ਹੈ, ਸੱਜੇ ਪਾਸੇ ਦੇ ਸਭ ਤੋਂ ਦਾਅਵਾਂ ਅੰਕ ਤੋਂ ਗਿਣਤੀ ਕਰਦੇ ਹੋਏ (ਚੈਕ ਅੰਕ ਨੂੰ ਛੱਡ ਕੇ) ਅਤੇ ਖੱਬੇ ਪਾਸੇ ਜਾ ਰਿਹਾ ਹੈ। ਤਾਂ ਚੈਕ ਅੰਕ ਇਸ ਤਰ੍ਹਾਂ ਚੁਣਿਆ ਜਾਂਦਾ ਹੈ ਕਿ:
ਜਿੱਥੇ ਮੋਡੁਲੋ ਕਾਰਵਾਈ ਹੈ।
ਲੁਨ ਅਲਗੋਰਿਦਮ ਦੇ ਵੱਖ-ਵੱਖ ਖੇਤਰਾਂ ਵਿੱਚ ਕਈ ਐਪਲੀਕੇਸ਼ਨ ਹਨ:
ਜਦੋਂ ਕਿ ਲੁਨ ਅਲਗੋਰਿਦਮ ਵਿਆਪਕ ਤੌਰ 'ਤੇ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ, ਪਰ ਵੱਖ-ਵੱਖ ਉਦੇਸ਼ਾਂ ਲਈ ਹੋਰ ਚੈਕਸਮ ਅਲਗੋਰਿਦਮ ਵੀ ਹਨ:
ਲੁਨ ਅਲਗੋਰਿਦਮ ਨੂੰ ਹੈਂਸ ਪੀਟਰ ਲੁਨ ਦੁਆਰਾ ਬਣਾਇਆ ਗਿਆ ਸੀ, ਜੋ ਕਿ ਇੱਕ IBM ਕੰਪਿਊਟਰ ਵਿਗਿਆਨੀ ਸੀ, 1954 ਵਿੱਚ। ਲੁਨ ਜਾਣਕਾਰੀ ਵਿਗਿਆਨ ਦੇ ਖੇਤਰ ਵਿੱਚ ਇੱਕ ਪਾਇਨੀਅਰ ਸੀ ਅਤੇ ਕਈ ਨਵੀਨਤਾਵਾਂ ਦਾ ਕਰੇਡਿਟ ਹੈ, ਜਿਸ ਵਿੱਚ KWIC (ਕੀ ਸ਼ਬਦ ਸੰਦਰਭ ਵਿੱਚ) ਇੰਡੈਕਸਿੰਗ ਪ੍ਰਣਾਲੀ ਸ਼ਾਮਲ ਹੈ।
ਇਹ ਅਲਗੋਰਿਦਮ ਅਕਸਰ ਗਲਤੀਆਂ ਦੇ ਖਿਲਾਫ ਸੁਰੱਖਿਆ ਕਰਨ ਲਈ ਬਣਾਇਆ ਗਿਆ ਸੀ, ਨਾ ਕਿ ਦੁਰੁਪਯੋਗ ਹਮਲਿਆਂ ਦੇ ਖਿਲਾਫ। ਇਹ ਮਹੱਤਵਪੂਰਨ ਹੈ ਕਿ ਜਦੋਂ ਕਿ ਲੁਨ ਅਲਗੋਰਿਦਮ ਬਹੁਤ ਸਾਰੀਆਂ ਆਮ ਗਲਤੀਆਂ ਦਾ ਪਤਾ ਲਗਾ ਸਕਦਾ ਹੈ, ਇਹ ਡੇਟਾ ਸੁਰੱਖਿਆ ਦੇ ਉਦੇਸ਼ਾਂ ਲਈ ਇੱਕ ਸੁਰੱਖਿਅਤ ਸ਼ਕਲ ਨਹੀਂ ਹੈ ਅਤੇ ਇਸ 'ਤੇ ਭਰੋਸਾ ਨਹੀਂ ਕੀਤਾ ਜਾਣਾ ਚਾਹੀਦਾ।
ਇਸਦੀ ਉਮਰ ਦੇ ਬਾਵਜੂਦ, ਲੁਨ ਅਲਗੋਰਿਦਮ ਆਪਣੀ ਸਾਦਗੀ ਅਤੇ ਆਮ ਟ੍ਰਾਂਸਕ੍ਰਿਪਸ਼ਨ ਗਲਤੀਆਂ ਨੂੰ ਪਕੜਨ ਵਿੱਚ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਹੋਣ ਕਾਰਨ ਵਿਆਪਕ ਤੌਰ 'ਤੇ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ।
ਇੱਥੇ ਵੱਖ-ਵੱਖ ਪ੍ਰੋਗ੍ਰਾਮਿੰਗ ਭਾਸ਼ਾਵਾਂ ਵਿੱਚ ਲੁਨ ਅਲਗੋਰਿਦਮ ਨੂੰ ਲਾਗੂ ਕਰਨ ਲਈ ਕੁਝ ਕੋਡ ਉਦਾਹਰਣ ਹਨ:
1import random
2
3def luhn_validate(number):
4 digits = [int(d) for d in str(number)]
5 checksum = 0
6 for i in range(len(digits) - 1, -1, -1):
7 d = digits[i]
8 if (len(digits) - i) % 2 == 0:
9 d = d * 2
10 if d > 9:
11 d -= 9
12 checksum += d
13 return checksum % 10 == 0
14
15def generate_valid_number(length):
16 digits = [random.randint(0, 9) for _ in range(length - 1)]
17 checksum = sum(digits[::2]) + sum(sum(divmod(d * 2, 10)) for d in digits[-2::-2])
18 check_digit = (10 - (checksum % 10)) % 10
19 return int(''.join(map(str, digits + [check_digit])))
20
21## ਉਦਾਹਰਣ ਦੀ ਵਰਤੋਂ:
22print(luhn_validate(4532015112830366)) # ਸਹੀ
23print(luhn_validate(4532015112830367)) # ਗਲਤ
24print(generate_valid_number(16)) # ਇੱਕ ਮਾਨਯ 16-ਅੰਕ ਨੰਬਰ ਬਣਾਉਂਦਾ ਹੈ
25
1function luhnValidate(number) {
2 const digits = number.toString().split('').map(Number);
3 let checksum = 0;
4 for (let i = digits.length - 1; i >= 0; i--) {
5 let d = digits[i];
6 if ((digits.length - i) % 2 === 0) {
7 d *= 2;
8 if (d > 9) d -= 9;
9 }
10 checksum += d;
11 }
12 return checksum % 10 === 0;
13}
14
15function generateValidNumber(length) {
16 const digits = Array.from({length: length - 1}, () => Math.floor(Math.random() * 10));
17 const checksum = digits.reduce((sum, digit, index) => {
18 if ((length - 1 - index) % 2 === 0) {
19 digit *= 2;
20 if (digit > 9) digit -= 9;
21 }
22 return sum + digit;
23 }, 0);
24 const checkDigit = (10 - (checksum % 10)) % 10;
25 return parseInt(digits.join('') + checkDigit);
26}
27
28// ਉਦਾਹਰਣ ਦੀ ਵਰਤੋਂ:
29console.log(luhnValidate(4532015112830366)); // ਸਹੀ
30console.log(luhnValidate(4532015112830367)); // ਗਲਤ
31console.log(generateValidNumber(16)); // ਇੱਕ ਮਾਨਯ 16-ਅੰਕ ਨੰਬਰ ਬਣਾਉਂਦਾ ਹੈ
32
1import java.util.Random;
2
3public class LuhnValidator {
4 public static boolean luhnValidate(long number) {
5 String digits = String.valueOf(number);
6 int checksum = 0;
7 boolean isEven = true;
8 for (int i = digits.length() - 1; i >= 0; i--) {
9 int digit = Character.getNumericValue(digits.charAt(i));
10 if (isEven) {
11 digit *= 2;
12 if (digit > 9) digit -= 9;
13 }
14 checksum += digit;
15 isEven = !isEven;
16 }
17 return checksum % 10 == 0;
18 }
19
20 public static long generateValidNumber(int length) {
21 Random random = new Random();
22 long[] digits = new long[length - 1];
23 for (int i = 0; i < length - 1; i++) {
24 digits[i] = random.nextInt(10);
25 }
26 long checksum = 0;
27 for (int i = digits.length - 1; i >= 0; i--) {
28 long digit = digits[i];
29 if ((length - 1 - i) % 2 == 0) {
30 digit *= 2;
31 if (digit > 9) digit -= 9;
32 }
33 checksum += digit;
34 }
35 long checkDigit = (10 - (checksum % 10)) % 10;
36 long result = 0;
37 for (long digit : digits) {
38 result = result * 10 + digit;
39 }
40 return result * 10 + checkDigit;
41 }
42
43 public static void main(String[] args) {
44 System.out.println(luhnValidate(4532015112830366L)); // ਸਹੀ
45 System.out.println(luhnValidate(4532015112830367L)); // ਗਲਤ
46 System.out.println(generateValidNumber(16)); // ਇੱਕ ਮਾਨਯ 16-ਅੰਕ ਨੰਬਰ ਬਣਾਉਂਦਾ ਹੈ
47 }
48}
49
ਲੁਨ ਅਲਗੋਰਿਦਮ ਨੂੰ ਲਾਗੂ ਕਰਨ ਵੇਲੇ, ਹੇਠਾਂ ਦਿੱਤੇ ਕੁਝ ਕਿਨਾਰਿਆਂ ਦੇ ਕੇਸਾਂ ਅਤੇ ਵਿਸ਼ੇਸ਼ ਵਿਚਾਰਾਂ ਨੂੰ ਧਿਆਨ ਵਿੱਚ ਰੱਖੋ:
ਇਨਪੁਟ ਪ੍ਰਮਾਣਿਕਤਾ: ਇਹ ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਇਨਪੁਟ ਇੱਕ ਮਾਨਯ ਨੰਬਰ ਸਤਰ ਹੈ। ਗੈਰ-ਅੰਕ ਅੱਖਰਾਂ ਨੂੰ ਢੰਗ ਨਾਲ ਸੰਭਾਲਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ (ਜਾਂ ਤਾਂ ਹਟਾਇਆ ਜਾਂ ਜਾਂ ਗਲਤ ਇਨਪੁਟ ਵਜੋਂ ਵਿਵਹਾਰ ਕੀਤਾ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ)।
ਲੀਡਿੰਗ ਜ਼ਿਰੋ: ਇਹ ਅਲਗੋਰਿਦਮ ਲੀਡਿੰਗ ਜ਼ਿਰੋ ਵਾਲੇ ਨੰਬਰਾਂ ਨਾਲ ਸਹੀ ਤਰ੍ਹਾਂ ਕੰਮ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ।
ਵੱਡੇ ਨੰਬਰ: ਕੁਝ ਪ੍ਰੋਗ੍ਰਾਮਿੰਗ ਭਾਸ਼ਾਵਾਂ ਵਿੱਚ ਆਮ ਇੰਟੇਜਰ ਕਿਸਮਾਂ ਦੀ ਸਮਰੱਥਾ ਤੋਂ ਵੱਧ ਲੰਬੇ ਨੰਬਰਾਂ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਤਿਆਰ ਰਹੋ।
ਖਾਲੀ ਇਨਪੁਟ: ਤੁਹਾਡੇ ਲਾਗੂ ਕਰਨ ਨੂੰ ਇਹ ਪਰਿਭਾਸ਼ਿਤ ਕਰੋ ਕਿ ਖਾਲੀ ਸਤਰਾਂ ਜਾਂ ਨੱਲ ਇਨਪੁਟ ਨੂੰ ਕਿਵੇਂ ਸੰਭਾਲਣਾ ਚਾਹੀਦਾ ਹੈ।
ਗੈਰ-ਮਿਆਰੀ ਅੱਖਰ ਸੈੱਟ: ਕੁਝ ਐਪਲੀਕੇਸ਼ਨਾਂ ਵਿੱਚ, ਤੁਸੀਂ ਅਜਿਹੇ ਨੰਬਰਾਂ ਦਾ ਸਾਹਮਣਾ ਕਰ ਸਕਦੇ ਹੋ ਜੋ ਮਿਆਰੀ 0-9 ਰੇਂਜ ਤੋਂ ਬਾਹਰ ਦੇ ਅੱਖਰਾਂ ਨਾਲ ਪ੍ਰਸਤੁਤ ਕੀਤੇ ਗਏ ਹਨ। ਇਹਨਾਂ ਨੂੰ ਕਿਵੇਂ ਸੰਭਾਲਣਾ ਚਾਹੀਦਾ ਹੈ, ਇਹ ਪਰਿਭਾਸ਼ਿਤ ਕਰੋ।
ਪ੍ਰਦਰਸ਼ਨ ਦੇ ਵਿਚਾਰ: ਐਪਲੀਕੇਸ਼ਨਾਂ ਲਈ ਜੋ ਬਹੁਤ ਸਾਰੇ ਇਨਪੁਟਾਂ ਦੀ ਪ੍ਰਮਾਣਿਕਤਾ ਨੂੰ ਤੇਜ਼ੀ ਨਾਲ ਕਰਨ ਦੀ ਜ਼ਰੂਰਤ ਹੈ, ਅਲਗੋਰਿਦਮ ਦੀ ਕਾਰਜਾਨੁਸ਼ਾਸਨ ਨੂੰ ਸੁਧਾਰਨ ਦੇ ਬਾਰੇ ਵਿਚਾਰ ਕਰੋ।
ਮਾਨਯ ਕ੍ਰੈਡਿਟ ਕਾਰਡ ਨੰਬਰ:
ਗਲਤ ਕ੍ਰੈਡਿਟ ਕਾਰਡ ਨੰਬਰ:
ਮਾਨਯ ਕੈਨੇਡੀਅਨ ਸੋਸ਼ਲ ਇਨਸ਼ੋਰੈਂਸ ਨੰਬਰ:
ਗਲਤ IMEI ਨੰਬਰ:
ਲੁਨ ਅਲਗੋਰਿਦਮ ਦੀ ਕਾਰਜਾਨੁਸ਼ਾਸਨ ਦੀ ਪ੍ਰਮਾਣਿਕਤਾ ਕਰਨ ਲਈ, ਤੁਸੀਂ ਹੇਠਾਂ ਦਿੱਤੇ ਟੈਸਟ ਕੇਸਾਂ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹੋ:
1def test_luhn_algorithm():
2 assert luhn_validate(4532015112830366) == True
3 assert luhn_validate(4532015112830367) == False
4 assert luhn_validate(79927398713) == True
5 assert luhn_validate(79927398714) == False
6
7 # ਬਣਾਏ ਗਏ ਨੰਬਰਾਂ ਦੀ ਟੈਸਟ
8 for _ in range(10):
9 assert luhn_validate(generate_valid_number(16)) == True
10
11 print("ਸਾਰੇ ਟੈਸਟ ਪਾਸ ਹੋ ਗਏ!")
12
13test_luhn_algorithm()
14