Mal außerhalb des Wettbewerbs (da ich ja zeitlich aktuell nicht kann) habe ich mir mal nur die Aufgabe geschnappt ohne die Lösungen anzuschauen und das war dann mein Ergebnis:
AutoIt
#include <Array.au3>
Global $LineStart = @ScriptLineNumber
Func _CreateID(Const $aUserdata)
Local Const $Vorname = 0
Local Const $ZweiterVorname = 1
Local Const $Nachname = 2
Local Const $Geburtsdatum = 3
Local Const $Geschlecht = 4
Local $Return
;~ Zeichen 1-5
$Return = StringLeft(StringReplace($aUserdata[$Nachname], '-', ''), 5)
For $i = 1 to 5-StringLen($Return)
$Return &= '9'
Next
;~ Zeichen 6
$Return &= Stringmid($aUserdata[$Geburtsdatum], 9, 1)
;~ Zeichen 7-8
If $aUserdata[$Geschlecht] = 'M' then
$Return &= StringSplit($aUserdata[$Geburtsdatum], '.')[2]
ElseIf $aUserdata[$Geschlecht] = 'W' then
$Return &= Number(StringSplit($aUserdata[$Geburtsdatum], '.')[2]) + 50
Else
Return False
EndIf
;~ Zeichen 9-10
$Return &= StringSplit($aUserdata[$Geburtsdatum], '.')[1]
;~ Zeichen 11
$Return &= StringRight($aUserdata[$Geburtsdatum], 1)
;~ Zeichen 12-15
$Return &= StringLeft($aUserdata[$Vorname], 2) & StringLeft($aUserdata[$ZweiterVorname], 2)
For $i = 1 to 15-Stringlen($Return)
$Return &= '9'
Next
;~ Zeichen 16
$Return &= _Pruefziffer($Return)
;~ Consolewrite($Return & @CRLF)
Return $Return
EndFunc ;==>_CreateID
Func _Pruefziffer(Const $String)
Local $Return = 0
Local $aArray = StringToASCIIArray($String)
While 1
For $Row = 0 to UBound($aArray, $UBOUND_ROWS)-1
$Return += $aArray[$Row]
Next
If $Return <= 9 then ExitLoop
$aArray = StringSplit($Return, '', $STR_NOCOUNT)
$Return = 0
WEnd
Return $Return
EndFunc
Global $LineEnd = @ScriptLineNumber
Alles anzeigen
Leider hatte ich nen dummen Fehler drinnen, der dafür gesorgt hatte, das ich wesentlich mehr Zeit gebraucht hatte als eigentlich nötig gewesen wäre XD aber das gehört auch dazu.
Daher war ich bei ~45 Minuten mit kleinen Unterbrechungen^^