29.4k views
2 votes
Python Exercise 4

1. In the nine-digit Social Insurance Number (SIN) given to each person having a job or
filing an income tax return in Canada, the ninth digit is a checked digit that is used to test
the validity of the other digits in the SIN. The ninth digit is determined by the following
procedure.
a. Double the 2 nd , 4 th , 6 th , and 8 th digits, if it will become a 2 digit number, add all the
digits to make it a single digit. For example, 6x2 =12, then 1+2=3
b. Add the digits of the number found in step (a)
c. Add the 1 st , 3 rd , 5 th , and 7 th digits.
d. Add the number found in steps (b) and (c)
e. Subtract the units digit of the result of step (d) from 10 and note the units digit of the
result. For the SIN to be valid, its ninth digit must have this value.
Write a program that repeatedly reads nine-digit numbers and determines whether or not
each number is a valid SIN> The program should stop when it reads the value
999999999.

User Thiagoh
by
4.4k points

2 Answers

5 votes

Final answer:

The student's question is about writing a Python program to validate nine-digit Canadian Social Insurance Numbers by calculating and verifying the check digit. The process includes specific steps to manipulate the digits, sum them, and perform a final calculation to determine if the SIN is valid.

Step-by-step explanation:

The task is to create a Python program to validate Canadian Social Insurance Numbers (SIN). The SIN validation process involves manipulating the digits according to a set of rules and checking if the final digit (the check digit) is correct. To write the program, one must follow these steps: double certain digits, sum their individual digits if needed, add certain sets of digits together, and perform a subtraction to find the expected check digit.

If you need to create a program like this, remember to handle each digit separately and to apply the rules exactly as described for the correct outcome. The provided steps align with standard programming exercises in manipulating and validating numbers.

Below is an example of how the program logic might look in Python (this is just a logic example, not a complete program):

  • Convert the SIN to a list of digits
  • Apply the doubling and summing of digits where necessary
  • Sum the required digits
  • Calculate the check digit
  • Compare with the last digit of the SIN

A valid program would repeat the process, checking each SIN number entered, and stop when the sentinel value '999999999' is input.

User Aert
by
4.3k points
2 votes

Answer:

# stack counter

def sc(n):

sum = 0

for d in str(n):

sum += int(d)

if sum>9:

return sc(sum)

return sum

# double stack count

def dsc(n):

return sc(2*n)

def isValidSIN(s):

if len(s) != 9:

return False

sum = dsc(s[1]) + dsc(s[3]) + dsc(s[5]) + dsc(s[7])

sum += int(s[0]) + int(s[2]) + int(s[4]) + int(s[6])

checkDigit = (10 - (sum % 10))%10

return int(s[-1]) == checkDigit

SINS = [

'518759097',

'066600271',

'666062989',

'299675595',

'022147292',

'321122210',

'553277039',

'398148031',

'392430286',

'548504232',

'463665182',

'217427954',

'204305551',

'000071647']

for sin in SINS:

if isValidSIN(sin): print(sin + " is valid")

else: print(sin + " is INVALID")

Step-by-step explanation:

I do believe there is a mistake in step e. If the sum has a units digit of 0, the subtraction would give you 10 for the check digit and that will fail. Therefore I added another modulo 10.

User Elie Asmar
by
4.6k points