Ponskaart

De ponskaart is een verouderd opslagmedium voor geautomatiseerde informatieverwerking in de vorm van een kartonnen kaart, waarbij de posities van ponsgaatjes de informatie representeren. De capaciteit is meestal 80 bytes.

Ponskaarten vervulden een centrale functie in het ponskaartensysteem dat in de 2e helft van de 20e eeuw de aanzet vormde voor geautomatiseerde informatieverwerking. Zij werden tot in de jaren 80 gebruikt om informatie op te slaan in een vorm die machinaal gelezen kon worden. De bekendste toepassing is die van het invoeren van gegevens in computersystemen.

Geschiedenis

Joseph-Marie Jacquard bouwde omstreeks 1790 een weefgetouw dat automatisch werd aangestuurd met ponskaarten.
De ponskaart zou echter niet door hem zijn bedacht. Volgens sommigen is de verre voorloper van de ponskaart zelfs terug te vinden in de middeleeuwen. In de negentiende eeuw werden ponskaarten of -platen gebruikt in muziekdoosjes en als draaiorgelboek voor draaiorgels, en bij de volkstelling van 1890 in de Verenigde Staten.

Gebruik voor gegevensverwerking

Gedurende de twintigste eeuw zijn ponskaarten algemeen gebruikt om informatie op te slaan die machinaal gelezen moest kunnen worden, bijvoorbeeld door mechanische of elektromechanische rekenmachines, en later door computers. Computerprogramma's werden vaak als stapels ponskaarten bewaard. Ook voor er computers waren, werden ze al gebruikt in sorteer- en data-opslagtoepassingen.

Voor het maken van ponskaarten werden kaartponsers gebruikt, grote apparaten met een typemachine-achtig toetsenbord, waarop datatypistes en programmeurs hun kaarten ponsten. Een bestand dat eenmaal in de computer zat, kon door de computer op een automatische ponsmachine worden uitgeponst. Soms stond op de bovenste regel in inkt de machinaal leesbare inhoud van de ponskaart afgedrukt voor menselijke lezers. Bepaalde kolommen (meestal de laatste acht kolommen) van een ponskaart werden op sommige computersystemen of door veel programmeertalen gebruikt om er een serienummer in te ponsen: als men namelijk de stapel kaarten op de grond liet vallen en ze raakten door elkaar, kon men daarmee de kaarten weer op volgorde leggen.

De Belgische warenhuisketen Colruyt, die zich specialiseerde in het hanteren van 'de laagste prijzen', gebruikte tot in het eind van de jaren tachtig nog ponskaarten: bij elke aankoop moest men een ponskaart uit het rek nemen en op het winkelwagentje vastklemmen. Aan de kassa werd deze stapel ponskaarten door de kassier ingevoerd in een primitieve computer die de laatste prijsverlagingen aanpaste en volautomatisch de eindrekening uitprintte. Met de invoering van de personal computer, de streepjescode en de handscanner werd de ponskaart begin jaren negentig langzaam maar zeker als verouderd beschouwd.

Ponskaarten werden in de computer ingelezen door kaartlezers, met honderden of duizenden kaarten per minuut. Kleine mechanische imperfecties van de kaarten (vouwtjes, hoekjes) konden tot vastlopen en gegevensverlies leiden. Naast ponskaarten bestond er ook ponsband, een lange (meestal papieren) strook waarin gaatjes geponst waren.

De Amerikaanse presidentsverkiezingen van 2000 liepen volledig in het honderd door het gebruik van ponskaarten als stemformulier in het kiesdistrict Florida, waar de kiezer zelf de juiste 'chad' (vierkantje in kaart op een ponsplaats met voorgeperforeerde randjes dat door een prikje van de stemmer helemaal los gaat - of soms niet helemaal, zoals bleek) moest doorprikken. Deze ponskaarten moesten handmatig ettelijke keren herteld worden en gecontroleerd op onreglementaire puncties, waardoor de definitieve uitslag 47 dagen op zich liet wachten.

In een later stadium bestonden er vergelijkbare kaarten, waarbij het voldoende was om met potlood de vakjes in te vullen. Dit systeem wordt nu nog steeds gebruikt bij het in grote groepen afnemen van meerkeuzevragen, zoals theoretische rijexamens of universitaire examens en de Centrale Eindtoets die op Nederlandse basisscholen wordt afgenomen. Het originele ponskaartformaat wordt bij deze optisch leesbare antwoordformulieren echter meestal niet meer gebruikt.

De ponskaart als formulier
De ponskaart kan de functie van geautomatiseerd opslaan van informatie op een wijze die ook weer geautomatiseerd leesbaar is, combineren met de functie van formulier dat ingevuld kan worden. Dit was in Nederland onder meer het geval bij het overschrijvingsformulier en de girobetaalkaart van de Postgiro (met het rekeningnummer van de betaler vooraf ingeponst), bij de kascheque (met het rekeningnummer van de houder vooraf ingeponst) en bij de acceptgiro (met vooraf het rekeningnummer van de ontvanger ingeponst, en indien bij de ontvanger bekend, ook het rekeningnummer van de betaler en het bedrag, en eventueel een betalingskenmerk). De ingevulde informatie (vaak ook niets omdat alleen een handtekening hoefde te worden geplaatst) werd dan later, voor zover nodig voor de verwerking, door de girodienst of bank erbij geponst (overige ingevulde informatie was bedoeld voor de ontvanger van het geld, die bij het rekeningafschrift ook de kaart ontving; later werd dit laatste afgeschaft).

Tekst die op de kaart werd geprint, werd zoveel mogelijk geplaatst op de horizontale stroken van de kaart tussen die van de (gelijk of bij de verwerking na invullen) mogelijk aangebrachte ponsgaten. De invulgebieden waren echter niet echt van de gebieden met mogelijke ponsgaten gescheiden, zodat de gebruiker bijvoorbeeld bij het zetten van de handtekening moest oppassen dat de pen niet bleef steken in een ponsgat. Ook kon er bijvoorbeeld achteraf een ponsgat zijn geslagen in de gedrukte tekst "De rekeninghouder, ", boven de plaats voor de handtekening, wat alleen rommelig aandeed, maar geen belangrijke informatie deed verdwijnen.

Dit systeem is tot 1981 toegepast. Toen werden de ponsgaten vervangen door extra duidelijke, in een speciaal font geprinte tekens, die met OCR leesbaar zijn.

Indeling van een kaart
Een standaard ponskaart of hollerithkaart (genoemd naar Herman Hollerith) heeft genormaliseerde afmetingen en bestaat uit 80 kolommen van 12 rijen en kan per kolom 1 teken bevatten. De standaardmaten van een kaart waren (sinds 1928) 7 3/8 bij 3 1/4 inch (ca. 187 × 82 mm). De informatie werd in de kaart aangebracht door in een of meer rijen van een kolom een klein rechthoekig gaatje te ponsen. Zulke gaatjes konden (aanvankelijk) mechanisch of (later) optisch worden gedetecteerd. Voor een kilobyte aan informatie waren dus minimaal 13 ponskaarten nodig. Deze regellengte van 80 tekens is lange tijd ook de standaard geweest voor printers en beeldschermen.

Soms werden er kleinere kaarten gebruikt. Bedrijven die gebruik maakten van het ponskaartensysteem zonden een speciale ponskaart mee met hun product, die dan - bijvoorbeeld na verkoop van dat product - in kleiner formaat (het gedeelte van 51 kolommen) werd geretourneerd; het restgedeelte bleef als bewijsstuk achter bij de klant. Zo werkte bijvoorbeeld de Nederlandse Postcheque- en Girodienst met kleinere kaarten, van slechts 51 kolommen. De kaarten werden met 80 kolommen geproduceerd, maar een deel van de kaart (de souche) werd er door de rekeninghouder afgescheurd voor diens eigen administratie.

De rijen van een ponskaart heten, van boven naar beneden: 12 11 0 1 2 3 4 5 6 7 8 9. De bovenste drie rijen heten zone, de onderste 10 rijen heten digit. De rij 0 hoort dus zowel bij de zone als bij de digits.

Is een kolom correct geponst, dan bevindt zich in de rijen 1 t/m 7 hoogstens één ponsing. Hierdoor wordt vermeden dat een kaart te slap wordt door te veel gaten. Het aantal mogelijkheden in een kolom is dus:
ponsingen in de rijen 12 11 0 8 9, aantal mogelijkheden 25=32.
een enkele ponsing in de rijen 1 t/m 7, of geen ponsing, aantal mogelijkheden 8.
Totaal: 8 × 32 = 256.
Dit is precies het aantal waarden dat een byte kan hebben.

De belangrijkste codes
De ponscombinaties zijn nauw verweven met EBCDIC, die binaire codering die onder andere door IBM werd gebruikt.

De letters en cijfers worden als volgt gecodeerd:
cijfers: een ponsing in een van de cijferposities (0 t/m 9)
letters A t/m I: een ponsing in 12 en een ponsing in een van de cijferposities (1 t/m 9)
letters J t/m R: een ponsing in 11 en een ponsing in een van de cijferposities (1 t/m 9)
letters S t/m Z: een ponsing in 0 en een ponsing in een van de cijferposities (2 t/m 9)
Andere ponscombinaties dienen voor besturing, leestekens e.d.

Alle codes
Voor de gekleurde vakken staan de ponsingen in de marge met dezelfde (maar donkerder) kleur (boven, onder, links of rechts).
De witte vakken zijn uitzonderingen, de ponsingen staan in het vak zelf.

Bijvoorbeeld de letter Z:
De hexadecimale code (EBCDIC, niet ASCII) staat boven in een grijs vak (E0) en links in een grijs vak (9), samen dus E9.
De Z staat in een lichtrood vak. De ponsingen staan in twee donkerrode vakken, boven 0 en rechts 9, samen twee ponsingen: 0 9.

{| class="wikitable vatop"
|align=center|hex→↓
|||
!width=5%|00!!width=5%|10!!width=5%|20!!width=5%|30
!width=5%|40!!width=5%|50!!width=5%|60!!width=5%|70
|
!width=5%|80!!width=5%|90!!width=5%|A0!!width=5%|B0
!width=5%|C0!!width=5%|D0!!width=5%|E0!!width=5%|F0
|align=center|←hex
|-
| 
|-align=center
| ||ponsing→↓
!style="background-color:gold"|12 9
!style="background-color:gold"|11 9
!style="background-color:gold"|0 9
!style="background-color:gold"|9
!style="background-color:gold"|12 0 9
!style="background-color:gold"|12 11 9
!style="background-color:gold"|11 0 9
!style="background-color:gold"|12 11 0 9
!style="background-color:#E08080"|12 0
!style="background-color:#E08080"|12 11
!style="background-color:#E08080"|11 0
!style="background-color:#E08080"|12 11 0
!style="background-color:#E08080"|12
!style="background-color:#E08080"|11
!style="background-color:#E08080"|0
!style="background-color:#E08080"|
|←ponsing↓
|-align=center
!0!!nvt
|NUL12 0 9 8 1
|DLE12 11 9 8 1
|DS11 0 9 8 1
|12 11 0 9 8 1
|Spacegeen ponsing
|&12
| -11
|12 11 0
|style="background-color:pink"|
|style="background-color:pink"|
|style="background-color:pink"|
|style="background-color:pink"|
|12 0
|11 0
|0 8 2
|0 0
!style="background-color:#E08080"|1 8
|-align=center
!1!!style="background-color:gold"|1
|style="background-color:khaki"|SOH
|style="background-color:khaki"|DC1
|style="background-color:khaki"|SOS
|style="background-color:khaki"|
|style="background-color:khaki"|
|style="background-color:khaki"|
| /0 1
|style="background-color:khaki"|
|style="background-color:pink"|a
|style="background-color:pink"|j
|style="background-color:pink"|
|style="background-color:pink"|
|style="background-color:pink"|A
|style="background-color:pink"|J
|11 0 9 1
|style="background-color:pink"|1
!style="background-color:#E08080"|1
|-align=center
!2!!style="background-color:gold"|2
|style="background-color:khaki"|STX
|style="background-color:khaki"|DC2
|style="background-color:khaki"|FS
|style="background-color:khaki"|SYN
|style="background-color:khaki"|
|style="background-color:khaki"|
|style="background-color:khaki"|
|style="background-color:khaki"|
|style="background-color:pink"|b
|style="background-color:pink"|k
|style="background-color:pink"|s
|style="background-color:pink"|
|style="background-color:pink"|B
|style="background-color:pink"|K
|style="background-color:pink"|S
|style="background-color:pink"|2
!style="background-color:#E08080"|2
|-align=center
!3!!style="background-color:gold"|3
|style="background-color:khaki"|ETX
|style="background-color:khaki"|TM
|style="background-color:khaki"|
|style="background-color:khaki"|
|style="background-color:khaki"|
|style="background-color:khaki"|
|style="background-color:khaki"|
|style="background-color:khaki"|
|style="background-color:pink"|c
|style="background-color:pink"|l
|style="background-color:pink"|t
|style="background-color:pink"|
|style="background-color:pink"|C
|style="background-color:pink"|L
|style="background-color:pink"|T
|style="background-color:pink"|3
!style="background-color:#E08080"|3
|-align=center
!4!!style="background-color:gold"|4
|style="background-color:khaki"|PF
|style="background-color:khaki"|RES
|style="background-color:khaki"|BYP
|style="background-color:khaki"|PN
|style="background-color:khaki"|
|style="background-color:khaki"|
|style="background-color:khaki"|
|style="background-color:khaki"|
|style="background-color:pink"|d
|style="background-color:pink"|m
|style="background-color:pink"|u
|style="background-color:pink"|
|style="background-color:pink"|D
|style="background-color:pink"|M
|style="background-color:pink"|U
|style="background-color:pink"|4
!style="background-color:#E08080"|4
|-align=center
!5!!style="background-color:gold"|5
|style="background-color:khaki"|HT
|style="background-color:khaki"|NL
|style="background-color:khaki"|LF
|style="background-color:khaki"|RS
|style="background-color:khaki"|
|style="background-color:khaki"|
|style="background-color:khaki"|
|style="background-color:khaki"|
|style="background-color:pink"|e
|style="background-color:pink"|n
|style="background-color:pink"|v
|style="background-color:pink"|
|style="background-color:pink"|E
|style="background-color:pink"|N
|style="background-color:pink"|V
|style="background-color:pink"|5
!style="background-color:#E08080"|5
|-align=center
!6!!style="background-color:gold"|6
|style="background-color:khaki"|LC
|style="background-color:khaki"|BS
|style="background-color:khaki"|ETB
|style="background-color:khaki"|UC
|style="background-color:khaki"|
|style="background-color:khaki"|
|style="background-color:khaki"|
|style="background-color:khaki"|
|style="background-color:pink"|f
|style="background-color:pink"|o
|style="background-color:pink"|w
|style="background-color:pink"|
|style="background-color:pink"|F
|style="background-color:pink"|O
|style="background-color:pink"|W
|style="background-color:pink"|6
!style="background-color:#E08080"|6
|-align=center
!7!!style="background-color:gold"|7
|style="background-color:khaki"|DEL
|style="background-color:khaki"|IL
|style="background-color:khaki"|ESC
|style="background-color:khaki"|EOT
|style="background-color:khaki"|
|style="background-color:khaki"|
|style="background-color:khaki"|
|style="background-color:khaki"|
|style="background-color:pink"|g
|style="background-color:pink"|p
|style="background-color:pink"|x
|style="background-color:pink"|
|style="background-color:pink"|G
|style="background-color:pink"|P
|style="background-color:pink"|X
|style="background-color:pink"|7
!style="background-color:#E08080"|7
|-align=center
!8!!style="background-color:gold"|8
|style="background-color:khaki"|
|style="background-color:khaki"|CAN
|style="background-color:khaki"|
|style="background-color:khaki"|
|style="background-color:khaki"|
|style="background-color:khaki"|
|style="background-color:khaki"|
|style="background-color:khaki"|
|style="background-color:pink"|h
|style="background-color:pink"|q
|style="background-color:pink"|y
|style="background-color:pink"|
|style="background-color:pink"|H
|style="background-color:pink"|Q
|style="background-color:pink"|Y
|style="background-color:pink"|8
!style="background-color:#E08080"|8
|-align=center
!9
|colspan=9|
|style="background-color:pink"|i
|style="background-color:pink"|r
|style="background-color:pink"|z
|style="background-color:pink"|
|style="background-color:pink"|I
|style="background-color:pink"|R
|style="background-color:pink"|Z
|style="background-color:pink"|9
!style="background-color:#E08080"|9
|-align=center
!9!!style="background-color:#50e050"|1 8
|style="background-color:lightgreen"|
|style="background-color:lightgreen"|EM
|style="background-color:lightgreen"|
|style="background-color:lightgreen"|
|style="background-color:lightgreen"|
|style="background-color:lightgreen"|
|style="background-color:lightgreen"|
|style="background-color:lightgreen"|
|colspan=9|
|-align=center
!A!!style="background-color:#50e050"|2 8
|style="background-color:lightgreen"|SMM
|style="background-color:lightgreen"|CC
|style="background-color:lightgreen"|SM
|style="background-color:lightgreen"|
|style="background-color:lightgreen"|¢
|style="background-color:lightgreen"|!
|'12 11
|style="background-color:lightgreen"|:
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
!style="background-color:#8080F0"|2 8
|-align=center
!B!!style="background-color:#50e050"|3 8
|style="background-color:lightgreen"|VT
|style="background-color:lightgreen"|CU1
|style="background-color:lightgreen"|CU2
|style="background-color:lightgreen"|CU3
|style="background-color:lightgreen"|
|style="background-color:lightgreen"|$
|style="background-color:lightgreen"|,
|style="background-color:lightgreen"|#
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
!style="background-color:#8080F0"|3 8
|-align=center
!C!!style="background-color:#50e050"|4 8
|style="background-color:lightgreen"|FF
|style="background-color:lightgreen"|IFS
|style="background-color:lightgreen"|
|style="background-color:lightgreen"|DC4
|style="background-color:lightgreen"|<
|style="background-color:lightgreen"|*
|style="background-color:lightgreen"|%
|style="background-color:lightgreen"|@
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
!style="background-color:#8080F0"|4 8
|-align=center
!D!!style="background-color:#50e050"|5 8
|style="background-color:lightgreen"|CR
|style="background-color:lightgreen"|IGS
|style="background-color:lightgreen"|ENQ
|style="background-color:lightgreen"|NAK
|style="background-color:lightgreen"|(
|style="background-color:lightgreen"|)
|style="background-color:lightgreen"|_
|style="background-color:lightgreen"|'
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
!style="background-color:#8080F0"|5 8
|-align=center
!E!!style="background-color:#50e050"|6 8
|style="background-color:lightgreen"|SO
|style="background-color:lightgreen"|IRS
|style="background-color:lightgreen"|ACK
|style="background-color:lightgreen"|
|style="background-color:lightgreen"|+
|style="background-color:lightgreen"|;
|style="background-color:lightgreen"|>
|style="background-color:lightgreen"|=
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
!style="background-color:#8080F0"|6 8
|-align=center
!F!!style="background-color:#50e050"|7 8
|style="background-color:lightgreen"|SI
|style="background-color:lightgreen"|IUS
|style="background-color:lightgreen"|BEL
|style="background-color:lightgreen"|SUB
|style="background-color:lightgreen"||
|style="background-color:lightgreen"|~
|style="background-color:lightgreen"|?
|style="background-color:lightgreen"|"
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
|style="background-color:lightblue"|
!style="background-color:#8080F0"|7 8
|-align=center
|align=center|↑hex||↑ponsing→
!style="background-color:#50e050"|12 9
!style="background-color:#50e050"|11 9
!style="background-color:#50e050"|0 9
!style="background-color:#50e050"|9
!style="background-color:#50e050"|12
!style="background-color:#50e050"|11
!style="background-color:#50e050"|0
!style="background-color:#50e050"|
!style="background-color:#8080F0"|12 0
!style="background-color:#8080F0"|12 11
!style="background-color:#8080F0"|11 0
!style="background-color:#8080F0"|12 11 0
!style="background-color:#8080F0"|12 0 9
!style="background-color:#8080F0"|12 11 9
!style="background-color:#8080F0"|11 0 9
!style="background-color:#8080F0"|12 11 0 9
|↑←ponsing
|}

Trivia
 In de nieuwe beiaard van de Mechelse Sint-Romboutskathedraal is een ponskaartbesturing aanwezig voor het elektromagnetisch hamerspel. 
 Meestal is een van de hoeken van een ponskaart schuin afgesneden. Voor de verwerkende apparatuur heeft dat geen betekenis, maar men kan eraan zien of er geen kaarten verkeerd in een stapel liggen.
 Bij het programmeren werden de laatste acht posities op een kaart vaak gebruikt om de kaarten te nummeren. Een compiler negeerde die laatste posities, daardoor gaf een programmaregel met 73 karakters nog weleens aanleiding tot bijna niet te vinden foutmeldingen.
 Het F.A.F.C. Wentgebouw op De Uithof (Utrecht) had als bijnaam "De Ponskaart", vanwege het patroon van ramen dat op een ponskaart leek. In 2012 werd besloten het gebouw te slopen om ruimte te maken voor nieuwbouw voor RIVM.
 In de jaren 1970 presenteerde de VPRO het hoorspel Piet Ponskaart, scènes uit het leven van een kantoorbediende''.
 De Efteling maakt al jarenlang gebruik van een soort grote ponskaarten om onderdelen van attracties op te laten draaien.

Geschiedenis van de informatica
Dataopslag
Geschiedenis van de textielindustrie
Opslagmedium