dk.identifiers package

Submodules

dk.identifiers.kid module

Strukturen på våre kid-nummer: sensornr = ‘0123’ # fire siffer kandidatnr = ‘01234’ # fem siffer

kiddata = sensornr + kandidatnr kid = kiddata + kontroll_10(kiddata)

dk.identifiers.kid.create_kids(tctr, sequencenum)[source]

BFP-8

dk.identifiers.kid.generate_kids(sensornr, count, start=0)[source]

Generate count kid numbers for sensor with sensornr (prefix), starting at start (for the counting part of the kid).

dk.identifiers.kid.is_valid_kid(s)[source]

Test if s is a valid kid number.

dk.identifiers.kid.kontroll_10(s)[source]

MOD10 algoritmen.

MOD10 er forkortelse for Modulus 10 algoritmen, også kalt Luhn-algoritmen etter oppfinneren Hans Peter Luhn. Modulus 10 algoritmen benyttes bl.a. som beregningsmetode for et kontrollsiffer i KID-numre på bankenes innbetalingsblanketter. (http://no.wikipedia.org/wiki/MOD10)

dk.identifiers.kid.kontroll_11(s)[source]

MOD11 algoritmen.

MOD11 er forkortelse for Modulus11. Modulus11 benyttes blant annet som beregningsmetode for et kontrollsiffer i kontonumre i norske banker, organisasjonsnummer og for det siste sifferet i norske fødselsnummer. (Norske fødselsnummer har to kontrollsifre, det nest siste er også et modulo 11 kontrollsiffer, men ved beregningen av dette benyttes det multiplikatorer i en annen og uregelmessig rekkefølge). (http://no.wikipedia.org/wiki/MOD11)

dk.identifiers.kid.vekt(n, base)[source]

Funksjon som gir en repeterende serie med siffer fra base, som har lengde n.

For kontroll_10 er vekttall-serien: 2,1,2,1,2,1... for kontroll_11 er vekttall-serien: 2,3,4,5,6,7,2,3,4,5,...

dk.identifiers.navn module

Operations on names: shortening, normalizing, ...

TODO: This module should be connected to the names database.

exception dk.identifiers.navn.Name2Long[source]

Bases: exceptions.ValueError

The name is too long and cannot be shortened.

dk.identifiers.navn.combine(fornavn, etternavn)[source]

Combine fornavn and etternavn with a space in-between. Remove any double spaces and fix capitalization.

dk.identifiers.navn.forkort_navn(lengde, fornavn, etternavn)[source]

Shorten names and return the result as a string.

dk.identifiers.navn.forkort_navn_u8(lengde, fornavn_u8, etternavn_u8)[source]
dk.identifiers.navn.normalize(fornavn, etternavn)[source]

Normalize double spaces and title case.

dk.identifiers.navn.normalize2u8(navn)[source]

Normalized := Utf-8 And Title Case.

dk.identifiers.navn.normalize2uni(navn_u8)[source]

Normalized := Unicode And Title Case.

dk.identifiers.navn.shorten(lengde, fornavn, etternavn)[source]

Apply algorithms described above, first to first-names, then to last-names. Return tuple of (fornavn, etternavn).

dk.identifiers.navn.shorten_fname(length, fname)[source]

Try to shorten the first-name fname to length characters (raise ValueError if we fail).

Algorithm: Consider the last of the person’s first names and replace it
with its initial. If the resulting name is still too long, then call ourselves recursively.
dk.identifiers.navn.shorten_fname_u8(length, fname)[source]
dk.identifiers.navn.shorten_lname(length, lname)[source]

Try to shorten the last-name lname to length characters (raise ValueError if we fail).

Algorithm: Consider the first of the person’s last names and replace it
with its initial. If the resulting name is still too long, then call ourselves recursively.
dk.identifiers.navn.shorten_lname_u8(length, lname)[source]
dk.identifiers.navn.shorten_u8(lengde, fornavn, etternavn)[source]
dk.identifiers.navn.test_module()[source]
>>> forkort_navn(25, 'Bjorn Steinar', 'Fjeld Pettersen')
u'Bjorn S Fjeld Pettersen'
>>> forkort_navn(22, 'Bjorn Steinar', 'Fjeld Pettersen')
u'Bjorn S F Pettersen'
>>> forkort_navn(18, 'Bjorn Steinar', 'Fjeld Pettersen')
Traceback (most recent call last):
...
ValueError: Bjorn S F Pettersen kan ikke forkortes til 18 bokstaver
>>> v = forkort_navn(25, u'Bjørn Øystein', u'Fjeld Pettersen')
>>> u'Bjørn Ø Fjeld Pettersen'
>>> v == u'Bjørn Ø Fjeld Pettersen'
True
>>> v = forkort_navn(21, u'Bjørn Øystein', u'Ødal Pettersen')
>>> v == u'Bjørn Ø Ø Pettersen'
True
>>> v = forkort_navn_u8(21, u'Bjørn Øystein'.encode('u8'), u'Ødal Pettersen'.encode('u8'))
>>> v == u'Bjørn Ø Ø Pettersen'.encode('u8')
True

Normalisering av navn til utf-8 med stor forbokstav som eneste store bokstav.

>>> normalize2u8(u'Bjørn') == u'Bjørn'.encode('u8')
True
>>> normalize2u8(u'BJørn') == u'Bjørn'.encode('u8')
True
>>> normalize2u8(u'BJØrn'.encode('u8')) == u'Bjørn'.encode('u8')
True
>>> normalize2u8(u'geir-arne') == 'Geir-Arne'
True

dk.identifiers.persnr module

Norwegian ‘Personnummer’ module.

exception dk.identifiers.persnr.PersnrException[source]

Bases: exceptions.ValueError

Base exception for persnr module.

class dk.identifiers.persnr.TestingPersnr[source]

Bases: object

Class to generate personnummer.

next_persnr()[source]
dk.identifiers.persnr.calc_par1(ppnr)[source]

Calculate the first parity digit.

dk.identifiers.persnr.calc_par2(ppnr)[source]

Calculate the second parity digit.

dk.identifiers.persnr.calc_parity(ppnr)[source]

Calculate parity digits.

dk.identifiers.persnr.calc_year(yr2, inr)[source]

Find the 4-digit year, following all the rules.

dk.identifiers.persnr.check_individnr(inr, year4)[source]

Hopelessly inefficient way of checking the individnr.

dk.identifiers.persnr.check_parity(pnr)[source]

Check the last two digits, which are parity controls.

dk.identifiers.persnr.check_pnr(pnr, birthday, sex)[source]
>>> check_pnr('02057035768', datetime.date(1970, 5, 2), 'm')
True
dk.identifiers.persnr.check_pnr_structure(pnr)[source]

Raise exception if the structure of the personnummer is incorrect.

dk.identifiers.persnr.date(pnr)[source]

Find the birth date and return as datetime.date() object.

dk.identifiers.persnr.gender(pnr)[source]

Extract the gender as ‘M’ for male and ‘F’ for female.

dk.identifiers.persnr.generate_pnr(day, gndr)[source]

Generate all persnrs for a given gender on a given day.

dk.identifiers.persnr.is_persnr(pnr, country='NO')[source]

Return True if pnr is a valid persnr.

dk.identifiers.persnr.list_pnr(day=None, gender='M')[source]

List all persnrs for a given gender on a given day.

dk.identifiers.persnr.multiply_reduce(avec, bvec)[source]

Multiply each item in a with corresponding item in b, then sum the result.

dk.identifiers.persnr.splitpnr(pnr)[source]

Split the personnummer into it’s parts.

dk.identifiers.persnr.testing_persnr(n=0)[source]

Create a persnr for use in unit tests. If different tests need separate persnr, pass a unique small integer as a parameter.

dk.identifiers.persnr.year(pnr)[source]

Extract the year from pnr.

Module contents