....
sub persomake {
# Umwandeln Datum
my ($a, $b, $c) = split(/\./, $in{'b2'});
$b2 = "$c$b$a";
$b2 = substr ($b2,0,6);
my ($pruefziffer, $summe) = &calculate($b2);
$b2 = "$b2$pruefziffer";
print "$b2";
print "<br><br>";
# Umwandeln Ablaufdatum
my ($a, $b, $c) = split(/\./, $in{'b3'});
$b3 = "$c$b$a";
$b3 = substr ($b3,0,6);
($pruefziffer, $summe) = &calculate($b3);
$b3 = "$b3$pruefziffer";
print "$b3";
print "<br><br>";
# Umwandeln Block 1
$b1 = $in{'b1'};
($pruefziffer, $summe) = &calculate($b1);
$b1 = "$b1$pruefziffer";
print "$b1";
print "<br><br>";
# Und jetzt die Endsumme, 3 mal kalkulieren mit der Prüfsumme
my $b4 = "$b1$b2$b3";
($pruefziffer, $summe) = &calculate($b4);
$endziffer = $endziffer + $summe;
$endziffer = $endziffer % 10;
print "$endziffer";
print "<br>Personalausweisnummer:<br>";
$nummer = "$b1\D<<$b2<$b3<<<<<<$endziffer";
print $nummer;
}
sub calculate {
my $value = $_[0];
local ($x, $y, $pruefziffer, $summe, $laenge, $stelle);
$laenge = length($value);
for ($x=1; $x<=$laenge; $x++) {
$y++;
$y=1 if ($y==4);
$stelle = substr($value, ($x-1), 1);
if ($y==1) { $pruefziffer = $pruefziffer + ($stelle*7); }
elsif ($y==2) { $pruefziffer = $pruefziffer + ($stelle*3); }
elsif ($y==3) { $pruefziffer = $pruefziffer + ($stelle*1); }
}
$summe = $pruefziffer;
$pruefziffer = $pruefziffer % 10;
print "<b>$pruefziffer, $summe</b><br>";
return ($pruefziffer, $summe);
}
....