One problem with this solution is that it assumes that number, represented as an integer, is 9 digits (can't start with a 0).

If the number can start with a 0, then it has to be represented as a string (or converted to a string and padding with zeros).

Military identification, including ID cards and identity discs were marked with the SIN during this period.

Social Insurance Numbers that begin with the number "9" are issued to temporary residents who are not Canadian citizens or permanent residents (e.g., foreign students, individuals on work visas).

= 9: raise Value Error("A Canadian SIN must be 9 digits long") check_digit = int(SIN[-1]) even_digits = [int(SIN[i]) for i in range(1,8,2)] odd_digits = [int(SIN[i]) for i in range(0,8,2)] total = sum(i/10 i for i in map(lambda x: 2*x, even_digits)) sum(odd_digits) if total == 0: return check_digit == 0 else: return ((total/10) 1)*10 - total == check_digit if __name__ == '__main__': for SIN in ['123 456 782', '123 456 789', '046 454 286']: print '%s is %sa valid Canadian SIN' % (SIN, '' if check(SIN) else 'NOT ') The crux of the program is that you need to have some way of iterating over each integer in the SIN.

Since the easiest way is to convert the integer to a string for manipulation operations and back to an integer for addition/multiplication operations, I used the following approach: Technically, a string is not an array of Characters in C# (though it is in C and C ), but because you can access the components of a string through an indexer, it can be treated like an array of characters.

Be aware that numeric input includes dates and times, whole numbers, and decimal values.

To allow only text in a cell, you can use data validation with a custom formula based on the ISTEXT function.

However, unlike in the US, in Canada there are specific legislated purposes for which a SIN can be requested. Unless an organization can demonstrate that the reason it is requesting an individual's SIN is specifically permitted by law, or that no alternative identifiers would suffice to complete the transaction, it cannot deny or refuse a product or service on the grounds of a refusal to provide a SIN.

Tags: , ,