Thomas Berger
and 1 contributors


SeeAlso::Identifier::PND - SeeAlso handling of PND Numbers (Personennormdatei)


  my $pnd = new SeeAlso::Identifier::PND "";

  print "invalid/empty" unless $pnd; # $pnd is defined but false !

  $pnd->value( '101115658X' );
  $pnd->value( 'PND:101115658X' );
  $pnd->value( '(DE-588)101115658X' );
  $pnd->value( '(DE-588a)101115658X' );
  $pnd->value( '' );
  $pnd->value; # '' or PND identifier again (101115658X)
  $pnd; # PND identifier as URI (

  $pnd->canonical; #

  $pnd->pretty; # '' or PND identifier again (101115658X)


This module handles identification numbers of the former Personennormdatei (PND) of the German National Library (DNB). These continue to be valid identification numbers of the successor Gemeinsame Normdatei (GND).

The constructor of SeeAlso::Identifier::PND always returns an defined identifier with all methods provided by SeeAlso::Identifier. As canonical form the URN representation of PND with prefix is used (these HTTP URIs actually resolve). As hashed and "pretty" form of an PND number, the number itself is used (including check digit).

The authority files PND, GKD and SWD have been combined to the GND (Gemeinsame Norm-Datei) in early 2012, the identifiers of "legacy" records however will remain valid. They already are distinct and as such the parent module SeeAlso::Identifier::GND handles them simultaneously. As of v0.57 SeeAlso::Identifier::GND is lacking support for 10-digit identifiers and does not implement all possible constraints (e.g. there are conflicting checksum algorithms but by looking at the identifier you can not always determine the authority file it belongs to and therefore there is no certainity about the correct checksum).

This module SeeAlso::Identifier::PND does not support the legacy GND numbers for former entries of GKD and SWD and therefore its realm continues to be restricted to authority records for persons and names (Tn and Tp) within the GND.

For compatibility reasons with SeeAlso::Identifier::GND the objects of this module are implemented as blessed hashes instead of blessed scalars as they would be by inheritance from SeeAlso::Identifier.


parse ( $value )

Get and/or set the value of the PND identifier. Returns an empty string or a possibly valid PND number. You can also use this method as function.

Older numbers begin with "10" to "16" and have 8 digits plus check digit (which might be "X"), More recently (since April 2011) assigned numbers have 9 digits plus check digit(0-X) and currently begin with "10". Probably at some time in 2016 the first 10-"digit" number starting with "11" will be assigned.

Any blanks are removed from the input. Informal prefixes "PND", "GND/" and the likes are permitted, also MARC organization codes "(DE-588)" and "(DE-588a)", and the official URI prefix .

Dashes are not removed any more when parsing, since for some former GKD numbers they are the only distinction.

value ( [$value] )

get/set using parse, not parent's method


Performs checksum calculation for already parsed PND numbers.

The mod-11-checksum is constructed the same way as for the "PICA PPN" (Pica Production Number of the German National Library (actually the PND identifiers simply are PICA PPNs).

hash ( [$value] )

Sets and/or gets a form of the identifier suitable for processing. In this class this will yield the same form as "parse", provided it passes the "valid" test(s).

indexed ( [$value] )

This is only since the parent class SeeAlso::Identifier::GND as of v0.57 is not compliant to the interfaces specified by SeeAlso::Identifier with respect to "indexed" being an alias for "hash".

canonical ( [$value] )

Yields the (for SeeAlso) canonical form of the identifier (if valid) as an URI.

normalized ( [$value] )

This is only since the parent class SeeAlso::Identifier::GND as of v0.57 is not compliant to the interfaces specified by SeeAlso::Identifier with respect to "normalized" being an alias for "canonical".

cmp ( $value )

For comparisons a "numerical" order is established by left-padding the identifiers with sufficiently many zeroes.


Try to give the most official form of the identifier.


Thomas Berger <>


Jakob Voss <> crafted SeeAlso::Identifier::GND.


This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

The full text of the license can be found in the LICENSE file included with this module.


perl(1), SeeAlso::Identifer::GND.