Procedure.l GeneratePruefziffer(Text.s) Mult.l = 7 Summe.l = 0 For a.l = 1 To Len(Text) Ziffer.l = Val(Mid(Text, a, 1)) Summe + (Ziffer * Mult) Select Mult Case 7: Mult = 3 Case 3: Mult = 1 Case 1: Mult = 7 EndSelect Next ProcedureReturn Summe - ((Summe / 10) * 10) EndProcedure Procedure PruefDatum(Tag.l, Monat.l, Jahr.l) If Tag > 31 : ProcedureReturn #False : EndIf MaxTag.l = 28 Select Monat Case 1: MaxTag = 31 Case 2 If Jahr & %11 = 0 MaxTag = 29 Else MaxTag = 28 EndIf Case 3: MaxTag = 31 Case 4: MaxTag = 30 Case 5: MaxTag = 31 Case 6: MaxTag = 30 Case 7: MaxTag = 31 Case 8: MaxTag = 31 Case 9: MaxTag = 30 Case 10: MaxTag = 31 Case 11: MaxTag = 30 Case 12: MaxTag = 31 Default: ProcedureReturn #False EndSelect If Tag > MaxTag : ProcedureReturn #False : EndIf If Tag < 1 Or Jahr < 1900 : ProcedureReturn #False : EndIf ProcedureReturn #True EndProcedure Procedure.s PeekByte2Zahl(Address.l, Length.l) Text.s = "" For a.l = 0 To Length - 1 Text = Text + Chr(PeekB(Address + a)) Next ProcedureReturn Text EndProcedure Structure Behoerden Kennzahl.s Reserved.s PLZ.s Ort.s EndStructure NewList Behoerden.Behoerden() OpenWindow(0, 0, 0, 225, 200, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_BorderLess | #PB_Window_ScreenCentered, "IDD-Generator") If CreateGadgetList(WindowID()) TextGadget(0, 0, 3, 50, 16, "Behörde: ", #PB_Text_Right) ComboBoxGadget(1, 51, 0, 170, 150) AddGadgetItem(1, -1, "(kein Ort)") Tab.l = 10 If ReadFile(0, "Kennzahlen.dat") While Eof(0) = #False Zeile.s = ReadString() AddElement(Behoerden()) Behoerden()\Kennzahl = Trim(Left(Zeile, Tab)) Behoerden()\Reserved = Trim(Mid(Zeile, Tab + 1, Tab)) Behoerden()\PLZ = Trim(Mid(Zeile, (Tab * 2) + 1, Tab)) Behoerden()\Ort = Trim(Mid(Zeile, (Tab * 3) + 1, (Tab * 10))) AddGadgetItem(1, -1, Behoerden()\Ort) Wend CloseFile(0) EndIf TextGadget(2, 0, 26, 50, 16, "Kennzahl: ", #PB_Text_Right) StringGadget(3, 51, 25, 32, 18, "0000", #PB_String_Numeric) TextGadget(18, 90, 26, 30, 16, "PLZ: ", #PB_Text_Right) StringGadget(19, 121, 25, 38, 18, "00000", #PB_String_Numeric) TextGadget(4, 0, 26, 50, 16, "Daten: ", #PB_Text_Right) StringGadget(5, 51, 25, 170, 18, "", #PB_String_ReadOnly) TextGadget(6, 0, 76, 75, 16, "Zählnummer: ", #PB_Text_Right) StringGadget(7, 76, 75, 38, 18, "00000", #PB_String_Numeric) TextGadget(8, 0, 101, 75, 16, "Geburtstag: ", #PB_Text_Right) StringGadget(9, 76, 100, 20, 18, "01", #PB_String_Numeric) StringGadget(10, 101, 100, 20, 18, "01", #PB_String_Numeric) StringGadget(11, 126, 100, 34, 18, "1970", #PB_String_Numeric) TextGadget(12, 0, 126, 75, 16, "Ablauftag: ", #PB_Text_Right) StringGadget(13, 76, 126, 20, 18, "01", #PB_String_Numeric) StringGadget(14, 101, 126, 20, 18, "01", #PB_String_Numeric) StringGadget(15, 126, 126, 34, 18, "2010", #PB_String_Numeric) ButtonGadget(16, 5, 150, 210, 18, "Generate!") StringGadget(17, 0, 175, 225, 18, "", #PB_String_ReadOnly) EndIf Repeat EventID.l = WaitWindowEvent() If GetGadgetState(1) <= 0 HideGadget(2, 0) HideGadget(3, 0) HideGadget(4, 1) HideGadget(5, 1) Else HideGadget(2, 1) HideGadget(3, 1) HideGadget(4, 0) HideGadget(5, 0) EndIf Select EventID Case #PB_EventGadget Select EventGadgetID() Case 1 TmpL.l = GetGadgetState(1) If TmpL > 0 SelectElement(Behoerden(), TmpL - 1) SetGadgetText(5, "Kennzahl=" + Behoerden()\Kennzahl + ", PLZ=" + Behoerden()\PLZ) SetGadgetText(3, Behoerden()\Kennzahl) EndIf Case 16 Gosub GenerateIDD EndSelect EndSelect Until EventID = #PB_EventCloseWindow End GenerateIDD: ;Behördenkennziffer If Len(GetGadgetText(3)) <> 4 SetGadgetText(3, RSet(Left(GetGadgetText(3), 4), 4, "0")) EndIf BKennzahl.s = GetGadgetText(3) ;Zählnummer If Len(GetGadgetText(7)) <> 5 SetGadgetText(7, RSet(Left(GetGadgetText(6), 5), "0")) EndIf ZaehlNr.s = GetGadgetText(7) ;Geburtstag If PruefDatum(Val(GetGadgetText(9)), Val(GetGadgetText(10)), Val(GetGadgetText(11))) = #False MessageRequester("Fehler!", "Das angegebene Geburtsdatum ist ungültig!", 0) ActivateGadget(9) ;Return EndIf GebDatum.s = RSet(GetGadgetText(11), 4, "0") + RSet(GetGadgetText(10), 2, "0") + RSet(GetGadgetText(9), 2, "0") ;Ablauftag If PruefDatum(Val(GetGadgetText(13)), Val(GetGadgetText(14)), Val(GetGadgetText(15))) = #False MessageRequester("Fehler!", "Das angegebene Geburtsdatum ist ungültig!", 0) ActivateGadget(13) ;Return EndIf AbDatum.s = RSet(GetGadgetText(15), 4, "0") + RSet(GetGadgetText(14), 2, "0") + RSet(GetGadgetText(13), 2, "0") IDD.s = BKennzahl + ZaehlNr + Str(GeneratePruefziffer(BKennzahl + ZaehlNr)) + "D<<" IDD = IDD + GebDatum + Str(GeneratePruefziffer(GebDatum)) + "<" IDD = IDD + AbDatum + Str(GeneratePruefziffer(AbDatum)) + "<<<<<<<" IDD = IDD + Str(GeneratePruefziffer(IDD)) SetGadgetText(17, IDD) Return ; jaPBe Version=1.3.7.20 ; FoldLines=0000000D000F0029002B003100330038 ; FirstLine=72 ; CursorPosition=154 ; ExecutableFormat=Windows ; Executable=C:\Programme\PureBasic\Programme\Projekte\Personalausweis\Personalausweis.exe ; DisableDebugger ; EOF