#include <Crypt.au3>
#cs 	 		****************** AutoIt Hackathon 2025 ******************

	Kategorie:  Teil 1 - String-Manipulation

	  Aufgabe:	"Mitarbeiter ID"

	  Aufwand:  10 - 30 min. (geschätzt)

	  Aufgabe:	Erstelle eine Funktion, die eine ID generiert und als Return (String) zurückgibt.
				zusätzliche Funktionen können erstellt werden, müssen aber im Lösungspost mit angegeben werden.
				Es gilt der Code-Block, der im Thread als Antwort gepostet wird.
				Als einzige Vorgabe für das Script wird die Funktion samt Namen vorgegeben.
				Diese ist unten ersichtlich, muss so verwendet werden und aus ihr muss das Ergebnis als Return erfolgen.


   Geschichte:	Die Firma "Blueberry" sucht neue Mitarbeiter. Da es sich um eine Sicherheitsfirma handelt,
				ist alles zugangsbeschränkt und Mitarbeiter haben nur Zutritt mit einer ID-Karte.
				Die ID auf der Karte wird mit einer Funktion in der Personalabteilung erstellt.
				Leider wurde diese Funktion von einem Ex-Mitarbeiter gelöscht.
				Ein Backup dieser Funktion existiert nicht.

  Anforderung:	- Die ID ist immer 14 Zeichen lang
				- Als Input in die Funktion wird ein 1-dimensionales Array übergeben:
					$data = ["Vorname","[Zweiter Vorname]","Nachname","Geburtsdatum(01.07.2000)","Geschlecht(M/W)"]
					- Der Datensatz ist immer korrekt formatiert und enthält immer korrekte Daten
					- Der zweite Vorname ist optional und kann auch leer sein ("")
					- Der Nachname kann auch "Doppelnamen" mit Bindestrich enthalten. Die Bindestriche werden ignoriert.
					- Anreden oder Titel kommen nicht vor.
					- Das Geburtsdatum ist im "deutschen" Format mit führenden Nullen ("01.07.2000") angegeben
					- Das Geschlecht wird mit den Großbuchstaben "M" für männlich und "W" für weiblich angegeben
			Zeichen 1-5:   Die ersten fünf Zeichen des Nachnamens (wird mit "9"en aufgefüllt, wenn dieser weniger als 5 Zeichen lang ist)
			Zeichen 6:     Die Dekadenziffer des Geburtsjahres (z. B. für 1987 wäre es die 8)
			Zeichen 7-8:   Der Geburtsmonat (das 7. Zeichen wird um 5 erhöht, wenn der FMitarbeiter weiblich ist, d. h. 51-62 anstelle von 01-12)
			Zeichen 9-10:  Der Tag innerhalb des Geburtsmonats (01-31)
			Zeichen 11:    Die Jahreszahl des Geburtsjahres (z. B. für 1987 wäre es die 7)
			Zeichen 12-13: Der Anfangsbuchstabe des Vornamens und des zweiten Vornamens, aufgefüllt mit einer 9, wenn kein zweiter Vorname vorhanden ist
			Zeichen 14:    einstellige Prüfziffer (einstellige Quersumme) auf Basis der Asc-Codes der Zeichen 1-13
				           (jedem Zeichen ist in der ASCII Tabelle ein numerischer Wert zugeordnet.
					       Bilde aus allen Werten eine einstellige Quersumme)

	   Prüfung:	 Die Funktion _Check() beinhaltet die Prüfungsdatensätze und einen Hash der Lösungs-ID
				 Die Ausgabe zeigt an, wie viele der ID's korrekt erstellt wurden
				 Sobald dein Script 100% korrekte ID's erstellt, poste dein Script im Thread

		Sieger:	 GEWONNEN HAT, WER ALS ERSTER EIN SCRIPT EINSTELLT, DASS DIE AUFGABE ZU 100% GELÖST HAT

PS:				 Die Verwendung von #includes ist gestattet, müssen aber im Script mit angegeben werden!

#ce 	 		****************** AutoIt Hackathon 2025 ******************

_Check() ; Um dein Script zu überprüfen, drücke F5.




; ================================= entferne alle Leer- und Kommentarzeilen und poste diesen Code-Block im Thread START =================================
; eigene includes ...
Global $LineStart = @ScriptLineNumber
Func _CreateID($aUserdata)
	Local $Return
	; ... dein Script hier ...
	Return $Return
EndFunc   ;==>_CreateID
; ... weitere Funktionen ...

; ... weitere Funktionen ...
Global $LineEnd = @ScriptLineNumber
; ================================= entferne alle Leer- und Kommentarzeilen und poste diesen Code-Block im Thread ENDE ==================================





; Funktion zur Überprüfung des eigenen Scripts. Nicht mit in den Thread laden!
Func _Check()
	Local $aPruefDaten[][] = [[], _
			["Robin", "", "Kruse", "02.04.1990", "M", "0x377B8075473CDB6827A640281F69487A57E801A6D8AFF51AC9AFE857BFF29835"], _
			["Jana", "Kim", "Behrens", "11.04.2010", "W", "0xE8F3A021EE7D2DBC1736B7C1AB29F8187D784DF94380C166CBA2F5359FDEF1AA"], _
			["Jana", "", "Moser", "23.03.1950", "W", "0xC506EDEEB0216C712ED983CFFD670D161A141BBA24ECC8D45E579DE2471297CC"], _
			["Andreas", "Mika", "Krämer", "09.10.1962", "M", "0xFBC624B1FAB6EC37B73C1F3E1FA5E8F271D91D5EAD3D7C71E661DB53D1A24E6B"], _
			["Elisa", "Leni", "Franke", "23.12.1967", "W", "0x57615EEB370328E440CAD4811D1331F0BB81E25B025B0C4CBDF6DB1453211730"], _
			["Lena", "", "Ger-Hogel", "03.06.1950", "W", "0xDD92F16ED8C6DA54EA743DBF564ECE03191893CE01BADEF05809AF786CF4EF4D"], _
			["Laurin", "", "Bach", "02.12.1959", "M", "0x9D206BEBC2DD039B20296A4CA69226F1E0FD97B5958536551F4A0C54E5BEE166"], _
			["Jo", "Marlon", "Schwab", "15.04.1979", "M", "0x2C856A384E1AD07D88122786104B77D3859623548C1C310C6378804A24C4D38F"], _
			["Sophia", "Martha", "Mor", "13.10.1998", "W", "0xC6250104E2E9F49FD3EEEC1D1C6403715146131DB341F3B68AA6EDF2E0432C04"], _
			["Mira", "Martha", "Jäger", "07.03.1995", "W", "0x85A73E58E0E8CCFAAF834CB9ACA7BFC1243FB8B8CE0D704F1D271A54C846AA4B"]]
	Local $aTestdaten[5]
	Local $correct = 0
	For $i = 1 To UBound($aPruefDaten) - 1
		$aTestdaten[0] = $aPruefDaten[$i][0]
		$aTestdaten[1] = $aPruefDaten[$i][1]
		$aTestdaten[2] = $aPruefDaten[$i][2]
		$aTestdaten[3] = $aPruefDaten[$i][3]
		$aTestdaten[4] = $aPruefDaten[$i][4]
		$CryptResultData = _Crypt_HashData(_CreateID($aTestdaten), $CALG_SHA_256)
		If $CryptResultData = $aPruefDaten[$i][5] Then	$correct += 1
	Next
	ConsoleWrite("Testergebnis: " & 100 / (UBound($aPruefDaten) - 1) * $correct & "%"  & @CRLF)
EndFunc   ;==>_Check