Prüfziffer auf Euro-Banknoten (Schleifen)
Auf allen Banknoten ist eine eindeutige Seriennummer aufgedruckt. Bei Euro-Scheinen haben diese Nummern das folgende Format:
N15000723228
Dabei ist das erste Zeichen ein Ländercode ("N" z. B. steht für Österreich). Es folgen 10 Nutzziffern und zuletzt die Prüfziffer (im Beispiel 8).
Die Prüfziffer wird wie folgt berechnet:
1. Schreibe anstelle des Ländercodes die Position des Buchstabens im Alphabet (startend mit 1 für A). Hier 14 für N. Die neue Seriennummer liest sich so 1415000723228.
2. Bilde die Quersumme aus allen Stellen (außer der Prüfziffer). Hier also 1+4+1+5+0+0+0+7+2+3+2+2 liefert 27.
3. Bilde den Neunerrest: 27 : 9 = 3 rest 0.
4. Zähle den Rest von acht ab. Ist das Resultat = 0, so ist die Prüfziffer gleich neun (9). In allen anderen Fällen ist diese Differenz (8 - Rest) gleich der Prüfziffer. Hier 8 - 0 = 8.
Schreiben Sie ein Programm, das eine Euro-Seriennummer entgegen nimmt und prüft, ob die Seriennummer korrekt ist.
0 Kommentare
18 Lösung(en)
// main.cpp
#include <QtGui/QApplication>
#include "MainWindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
// MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
virtual void checkNumber();
private:
Ui::MainWindow *ui;
virtual QString letterToNumber(char aLetter);
};
#endif // MAINWINDOW_H
// MainWindow.cpp
#include "MainWindow.h"
#include "ui_MainWindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->teEingabe, SIGNAL(textChanged()), this, SLOT(checkNumber()));
checkNumber();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::checkNumber()
{
QString number = ui->teEingabe->toPlainText();
number = letterToNumber(number.at(0).toAscii()) + number.mid(1);
int istCheckSumme = QString(number.at(number.size() - 1)).toInt();
int quersumme = 0;
for (int i = 0; i < number.size() - 1; ++i)
{
quersumme += QString(number.at(i)).toInt();
}
int sollCheckSumme = quersumme % 9;
sollCheckSumme = 8 - sollCheckSumme;
if (sollCheckSumme == 0) sollCheckSumme = 9;
if (sollCheckSumme == istCheckSumme)
{
ui->laAusgabe->setText("Valid!");
}
else
{
ui->laAusgabe->setText("Invalid!");
}
}
QString MainWindow::letterToNumber(char aLetter)
{
switch (aLetter)
{
case 'A': case 'a': return "1";
case 'B': case 'b': return "2";
case 'C': case 'c': return "3";
case 'D': case 'd': return "4";
case 'E': case 'e': return "5";
case 'F': case 'f': return "6";
case 'G': case 'g': return "7";
case 'H': case 'h': return "8";
case 'I': case 'i': return "9";
case 'J': case 'j': return "10";
case 'K': case 'k': return "11";
case 'L': case 'l': return "12";
case 'M': case 'm': return "13";
case 'N': case 'n': return "14";
case 'O': case 'o': return "15";
case 'P': case 'p': return "16";
case 'Q': case 'q': return "17";
case 'R': case 'r': return "18";
case 'S': case 's': return "19";
case 'T': case 't': return "20";
case 'U': case 'u': return "21";
case 'V': case 'v': return "22";
case 'W': case 'w': return "23";
case 'X': case 'x': return "24";
case 'Y': case 'y': return "25";
case 'Z': case 'z': return "26";
default: return "0";
}
return "0";
}
// MainWindow.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="windowModality">
<enum>Qt::ApplicationModal</enum>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>331</width>
<height>242</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>EBPC</string>
</property>
<property name="windowOpacity">
<double>1.000000000000000</double>
</property>
<property name="unifiedTitleAndToolBarOnMac">
<bool>false</bool>
</property>
<widget class="QWidget" name="centralWidget">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QPlainTextEdit" name="teEingabe">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>26</height>
</size>
</property>
<property name="font">
<font>
<pointsize>11</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="plainText">
<string>N15000723228</string>
</property>
<property name="centerOnScroll">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="laAusgabe">
<property name="font">
<font>
<pointsize>48</pointsize>
<weight>75</weight>
<italic>false</italic>
<bold>true</bold>
<underline>false</underline>
<strikeout>false</strikeout>
<kerning>true</kerning>
</font>
</property>
<property name="text">
<string>...</string>
</property>
<property name="textFormat">
<enum>Qt::PlainText</enum>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>
Lösung von: Name nicht veröffentlicht
"""
author: m1s73r
date: 14/4/2012
"""
from string import ascii_letters
def eingabe():
#input function
richtig = False
while richtig == False:
nummer = list(input("Seriennummer: "))
if len(nummer) != 12:
print()
print("Fehler! Die Eingabe muss aus 12 Zeichen bestehen!")
else:
richtig = True
return nummer
def pruefen(p_nummer):
#check if first charactar is a letter
if p_nummer[0] in ascii_letters:
richtig = True
else:
richtig = False
return richtig
def berechnen(p_nummer):
#calculate the checksum, check if equal with checknum
posBuchstabe = BuchstabeZuNummer(p_nummer)
p_nummer[0] = posBuchstabe
pruefnummer = int(p_nummer[len(p_nummer)-1])
summe = quersumme(p_nummer)
checknum = rest(summe, pruefnummer)
if checknum == pruefnummer:
richtig = True
else:
richtig = False
return richtig
def rest(p_summe, p_pruefnummer):
#calculate the leftover
checknum = 8
neunerrest = p_summe % 9
checknum -= neunerrest
if checknum == 0:
checknum = 9
return checknum
def BuchstabeZuNummer(p_nummer):
#convert letter to number
ersterBuchstabe = p_nummer[0]
liste = ["?", "A", "B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
for i in range(27):
if liste[i] == ersterBuchstabe:
posBuchstabe = i
return posBuchstabe
def quersumme(p_nummer):
#calculate the checksum
liste_neu = []
erg = 0
for i in range(len(p_nummer)):
liste_neu += [int(p_nummer[i])]
for j in range(1, len(liste_neu)-1):
erg += liste_neu[j]
zahl = str(p_nummer[0])
zwSumme = 0
for zifferBuchstabe in zahl:
zwSumme += int(zifferBuchstabe)
erg += zwSumme
return erg
def main():
#main function
nummer = eingabe()
if pruefen(nummer):
if berechnen(nummer):
print()
print("Seriennummer korrekt!")
else:
print()
print("Seriennummer inkorrekt!")
else:
print("Fehler! Die Seriennummer muss mit einem Buchstaben beginnen!")
#------------------------
#main
if __name__ == "__main__":
main()
Lösung von: Name nicht veröffentlicht
#!/usr/bin/env python2.7
# -*- Coding: utf-8 -*-
###Euroschein-Echtheitspruefung###
pruefnr = raw_input('Bitte Nummer eingeben: ')
pruefnr = pruefnr.replace(' ','') #entfernt whitespaces
landnum = ord(pruefnr[0]) - 64 #wandelt Länderkennung in Zahl um
pruefnr = pruefnr.replace(pruefnr[0],str(landnum))
sichernum = pruefnr[len(pruefnr)-1] #ermittelt Sicherheitsnummer
quer = 0
for i in range(0,len(pruefnr)-1):
quer = quer + int(pruefnr[i])
rest = quer % 9
rest = 8 - rest
if rest == 0:
rest = 9
if rest == int(sichernum): #Prüfung auf Echtheit
print 'Der Gedlschehin ist Wert was drauf steht'
else:
print 'Dies ist eine Bluete'
Lösung von: Name nicht veröffentlicht
*&---------------------------------------------------------------------*
*& Report ZT_EURO_PRUEFZIFFER_PRUEFEN
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zt_euro_pruefziffer_pruefen.
PARAMETERS: p_schein TYPE string.
DATA: g_obj_match TYPE REF TO cl_abap_matcher,
g_regex_pattern TYPE string,
g_match TYPE abap_bool,
g_number_of_letter TYPE n LENGTH 2,
g_new_pruefz TYPE n LENGTH 13,
i TYPE i,
g_quersum TYPE i,
g_erg_pruefzif TYPE i,
g_rest TYPE i.
START-OF-SELECTION.
"Erstmal plausis
"string muss 12 Zeichen haben
"1. Zeichen ist ein Buchstabe
g_regex_pattern = '([A-Z])([0-9]{11})'. "einmal A-Z oder a-z und 11 Mal 0-9
* g_regex_pattern = '[A-z]'.
g_obj_match = cl_abap_matcher=>create( pattern = g_regex_pattern
text = p_schein
).
g_obj_match->match( RECEIVING success = g_match ).
IF g_match EQ 'X'. " wenn Eingabe überhaupt sinnvoll
ELSE.
MESSAGE 'Eingabe nicht gültig' TYPE 'I'.
exit.
ENDIF.
"der wievielte Buchstabe des alphabets ist das erste Zeichen der Zeichenkette p_schein
PERFORM get_number_of_letter.
CONCATENATE g_number_of_letter p_schein+1(11) INTO g_new_pruefz.
i = 0.
DO 12 TIMES.
g_quersum = g_quersum + g_new_pruefz+i(1).
i = i + 1.
ENDDO.
g_rest = g_quersum MOD 9.
g_erg_pruefzif = 8 - g_rest.
IF g_erg_pruefzif = 0.
g_erg_pruefzif = 9.
ENDIF.
IF g_erg_pruefzif EQ p_schein+11.
MESSAGE 'Prüfziffer korrekt' TYPE 'I'.
ELSE.
MESSAGE 'Prüfziffer inkorrekt' TYPE 'I'.
ENDIF.
*&---------------------------------------------------------------------*
*& Form GET_NUMBER_OF_LETTER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_number_of_letter .
CASE p_schein(1).
WHEN 'A'.
g_number_of_letter = 01.
WHEN 'B'.
g_number_of_letter = 02.
WHEN 'C'.
g_number_of_letter = 03.
WHEN 'D'.
g_number_of_letter = 04.
WHEN 'E'.
g_number_of_letter = 05.
WHEN 'F'.
g_number_of_letter = 06.
WHEN 'G'.
g_number_of_letter = 07.
WHEN 'H'.
g_number_of_letter = 08.
WHEN 'I'.
g_number_of_letter = 09.
WHEN 'J'.
g_number_of_letter = 10.
WHEN 'K'.
g_number_of_letter = 11.
WHEN 'L'.
g_number_of_letter = 12.
WHEN 'M'.
g_number_of_letter = 13.
WHEN 'N'.
g_number_of_letter = 14.
WHEN 'O'.
g_number_of_letter = 15.
WHEN 'P'.
g_number_of_letter = 16.
WHEN 'Q'.
g_number_of_letter = 17.
WHEN 'R'.
g_number_of_letter = 18.
WHEN 'S'.
g_number_of_letter = 19.
WHEN 'T'.
g_number_of_letter = 20.
WHEN 'U'.
g_number_of_letter = 21.
WHEN 'V'.
g_number_of_letter = 22.
WHEN 'W'.
g_number_of_letter = 23.
WHEN 'X'.
g_number_of_letter = 24.
WHEN 'Y'.
g_number_of_letter = 25.
WHEN 'Z'.
g_number_of_letter = 26.
WHEN OTHERS.
g_number_of_letter = 666.
ENDCASE.
ENDFORM. " GET_NUMBER_OF_LETTER
Lösung von: Benjamin Kluszynski (( Coder :-) ))
package javaapplication1;
import java.util.Scanner;
public class JavaApplication1 {
public static int quersumme(String sn) {
int qsumme = 0;
for(int i = 0; i < sn.length();i++) {
qsumme += Integer.parseInt(sn.substring(i, i+1));
}
return qsumme;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
boolean istkorrekt = false;
System.out.print ("Euro Seriennummer: ");
String seriennummer = input.next();
//Ländercode filtern
char lcode = seriennummer.substring(0, 1).charAt(0);
//Ländercode in Zahl umwandeln! Funktioniert mit -64 nur bei Großbuchstaben!
int buchInt = (int)lcode - 64;
//Neue Seriennummer bilden ohne Länderbuchstabe und Prüfziffer
String neuSN = Integer.toString(buchInt) + seriennummer.substring(1, seriennummer.length()-1);
//Quersumme bilden bisauf Prüfziffer
int qSumme = quersumme(neuSN);
//Prüfziffer filtern
int pruefziffer = Integer.parseInt(seriennummer.substring(seriennummer.length()-1));
//Berechnung des Rests
int rest = qSumme % 9;
rest = 8 - rest;
//Check Up
if(rest == 0)
rest = 9;
if(rest == pruefziffer)
istkorrekt = true;
//Ausgabe: true für gültig und false für ungültig!
System.out.println (istkorrekt);
}
}
Lösung von: Name nicht veröffentlicht
class Pruefziffer {
public $quersumme=0;
public $pruefziffer=0;
public $zuPruefendeZiffer=0;
public $seriennummer="";
public $seriennummerArray=Array();
public $nutzzifferArray=Array();
public $countryCode="";
public function __construct($seriennummer){
$this->seriennummer = $seriennummer;
$this->seriennummerArray = str_split($this->seriennummer);
$this->countryCode = $this->seriennummerArray[0];
$this->pruefziffer = $this->seriennummerArray[11];
$this->nutzzifferArray = $this->seriennummerArray;
array_shift($this->nutzzifferArray);
array_pop($this->nutzzifferArray);
$this->quersumme = array_sum($this->nutzzifferArray) + $this->getSumOfDigits($this->getCharPosInAlphabet($this->countryCode));
if ($this->quersumme / 9 == 0) {
$this->zuPruefendeZiffer = 9;
} else {
$this->zuPruefendeZiffer = 8 - ($this->quersumme % 9);
}
if ($this->isValid($this->zuPruefendeZiffer, $this->pruefziffer)) {
echo 'Valid.';
}
else {
echo 'Invalid';
}
}
public function getCharPosInAlphabet($char){
$alphabet = Array(
0 => "", 1 => "A", 2 => "B", 3 => "C",
4 => "D", 5 => "E", 6 => "F", 7 => "G",
8 => "H", 9 => "I",10 => "J", 11 => "K",
12 => "L", 13 => "M", 14 => "N", 15 => "O",
16 => "P", 17 => "Q", 18 => "R", 19 => "S",
20 => "T", 21 => "U", 22 => "V", 23 => "W",
24 => "X", 25 => "Y", 26 => "Z");
return array_search($char, $alphabet);
}
public function getSumOfDigits($number){
$strDigits = (string) $number;
for($sumOfDigits = $i = 0; $i < strlen($strDigits); $i++) {
$sumOfDigits += $strDigits{$i};
}
return $sumOfDigits;
}
public function isValid($zuPruefendeZiffer,$pruefziffer){
if ($zuPruefendeZiffer == $pruefziffer) {
return true;
}
else {
return false;
}
}
}
Lösung von: Name nicht veröffentlicht
def check(n):
a = 8-(sum([int(a) for a in n.replace(n[0],str(ord(n[0])-64))])-int(n[len(n)-1]))%9
if a == 0:
if n[len(n)-1] == "9": return True
else: return False
else: return str(a) == n[len(n)-1]
print(check("N15000723228"))
Lösung von: Name nicht veröffentlicht
// Autor: Andy Großhennig
// Solution for task: Prüfziffer auf Euro-Banknoten (Schleifen)
#include <iostream>
using namespace std;
// Function: Get a serial number and split it in summands and check number
void getSerialNumber(int &iSummands, short &shCheckNumber)
{
char c_arrSerialNumber[13];
cout << "Geben sie eine Euro Banknoten Seriennummer ein (x 2 3 4 5 6 7 8 9 0 1 2)\n";
cin >> c_arrSerialNumber;
cout << endl;
//Set the check number
shCheckNumber = static_cast<short>(c_arrSerialNumber[11] - '0');
// Switch: set the number for the specific land code
switch(c_arrSerialNumber[0])
{
case 'a':
iSummands = 1;
break;
case 'b':
iSummands = 2;
break;
case 'c':
iSummands = 3;
break;
case 'd':
iSummands = 4;
break;
case 'e':
iSummands = 5;
break;
case 'f':
iSummands = 6;
break;
case 'g':
iSummands = 7;
break;
case 'h':
iSummands = 8;
break;
case 'i':
iSummands = 9;
break;
case 'j':
iSummands = 1;
break;
case 'k':
iSummands = (1 + 1);
break;
case 'l':
iSummands = (1 + 2);
break;
case 'm':
iSummands = (1 + 3);
break;
case 'n':
iSummands = (1 + 4);
break;
case 'o':
iSummands = (1 + 5);
break;
case 'p':
iSummands = (1 + 6);
break;
case 'q':
iSummands = (1 + 7);
break;
case 'r':
iSummands = (1 + 8);
break;
case 's':
iSummands = (1 + 9);
break;
case 't':
iSummands = 2;
break;
case 'u':
iSummands = (2 + 1);
break;
case 'v':
iSummands = (2 + 2);
break;
case 'w':
iSummands = (2 + 3);
break;
case 'x':
iSummands = (2 + 4);
break;
case 'y':
iSummands = (2 + 5);
break;
case 'z':
iSummands = (2 + 6);
break;
default:
cout << "Fehlerhafte Eingabe! Das erste Zeichen der Seriennummer muss ein Kleinbuchstabe sein.\n";
system("Pause");
exit(0);
}
// Loop: Add the rest numbers from the serial number
for(int i = 1;i <= 10;i++)
{
iSummands += static_cast<int>(c_arrSerialNumber[i] - '0');
}
}
// Function: Check the serial number for validity
void checkSerialNumber()
{
int iSummands = 0;
short shCheckNumber = 0;
getSerialNumber(iSummands, shCheckNumber);
//Get the rest of nine from the cross sum and decrease 8 from it
iSummands = 8 - (iSummands % 9);
// If: Set nine if the result is zero
if(iSummands == 0)
iSummands += 9;
// If: Show whether the serial number is valid or not
if(iSummands == shCheckNumber)
cout << "Die Seriennummer ist fehlerfrei\n";
else cout << "Die Seriennummer ist falsch. Eingabe ueberpruefen!\n";
}
int main()
{
checkSerialNumber();
cout << "\n\n";
system("Pause");
return 0;
}
Lösung von: Andy Großhennig (Bundeswehr)
### Überprüfung Seriennummer Euroschein ###
# Ländercode
lc = ["D","E","F","G","H","L","M","N","P","R","S","T","U","V","X","Y","Z"]
# Alphabet
alpha = ["platz","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
# Eingabe Seriennummer
ve = False
while ve == False:
print (" Bitte geben sie eine Seriennummer zur Überprüfung ein : ")
x = input(str())
if len(x) == 12 and x[0] in lc and x[1:12].isdigit() == True:
print("Seriennummer",x,"wird überprüft")
prüfz = int(x[11])
print("Prüfziffer ist :", prüfz)
ve = True
else:
print(" Falsche Eingabe, bitte versuchen Sie es erneut. ")
ve = False
# Ländercode gegen Position im Alphabet tauschen
xneu = x.replace(x[0],str(alpha.index(x[0])))
# Quersumme ohne Prüfziffer
xneulist =[]
for i in xneu:
xneulist.append(int(i))
del xneulist[len(xneulist)-1]
xneuquer = 0
for i in xneulist:
xneuquer += i
# Überprüfung der Prüfziffer
rest = xneuquer % 9
if 8 - rest == 0:
if prüfz == 9:
print("Die Seriennummer ist korrekt.")
else:
print("Achtung, die Seriennummer ist nicht korrekt !")
else:
if 8 - rest == prüfz:
print("Die Seriennummer ist korrekt.")
else:
print("Achtung, die Seriennummer ist nicht korrekt !")
Lösung von: Name nicht veröffentlicht
Dim eingabe As String
Dim laendercode As Integer
Dim zähler As Integer
Dim ziffern As Integer
Dim quersumme As Integer
Dim laendercodezahl As Integer
Dim rest As Integer
Dim pruefziffer As Integer
Dim pruefzifferErgebnis As Integer
Dim laendercodezahleinzeln As Integer
eingabe = txtEingabe.Text
'Lädercode umwandeln
laendercode = Asc(Mid(eingabe, 1, 1))
laendercodezahl = laendercode - 64 'ASCII Code! A= 65 - 64 = 1 usw.
'Nutzziffern filtern
For zähler = 2 To eingabe.Length - 1
ziffern = Mid(eingabe, zähler, 1) ' Zerteilen in einzelne Ziffern
ziffern = CInt(ziffern) 'Zurück zu Integer um damit zu rechnen
quersumme = quersumme + ziffern
pruefziffer = Mid(eingabe, eingabe.Length, eingabe.Length) 'Pruefziffer ermitteln
Next
For zähler = 1 To 2
laendercodezahleinzeln = Mid(laendercodezahl, zähler, 1)
quersumme = quersumme + laendercodezahleinzeln
Next
rest = quersumme Mod 9
pruefzifferErgebnis = 8 - rest
If pruefzifferErgebnis = pruefziffer Then
txtAusgabe.Text = "Pruefziffer ist korrekt!"
Else
txtAusgabe.Text = "Pruefziffer ist nicht korrekt!"
End If
Lösung von: Johannes vh ()
public class pruef
{
string pruefnummer;
public pruef(string pruefnummer)
{
this.pruefnummer = pruefnummer;
}
private string GetCountry()
{
char c = pruefnummer.ToCharArray()[0];
c = Char.ToUpper(c);
int country = ((int)c)-0x40;
return country.ToString();
}
private void ReplaceLetter(string countryNr)
{
StringBuilder b = new StringBuilder();
b.Append(pruefnummer.Substring(1,pruefnummer.Length-1));
b.Insert(0,countryNr,1);
pruefnummer = b.ToString();
}
private int GetPruefNr()
{
string temp = pruefnummer.Substring(0,pruefnummer.Length-1);
char[] numbers_ascii = temp.ToCharArray();
int[] numbers = new int[numbers_ascii.Length];
for (int i=0;i< numbers_ascii.Length;i++)
{
numbers[i] = ((int)numbers_ascii[i])-0x30;
}
int ergebnis = 0;
for (int j=0;j<numbers.Length;j++)
{
ergebnis+=numbers[j];
}
ergebnis = ergebnis%9;
if(ergebnis==8)
{
ergebnis=9;
}
else
{
ergebnis= 8-ergebnis;
}
return ergebnis;
}
public bool CheckPruefZiffer()
{
string country = GetCountry();
ReplaceLetter(country);
int pruefnr = GetPruefNr();
string temp = pruefnummer.Substring(pruefnummer.Length-1,1);
if(temp ==pruefnr.ToString())
{
return true;
}
else
{
return false;
}
}
}
Lösung von: Name nicht veröffentlicht
#!/usr/bin/perl -w
use strict;
use warnings;
# N15000723228 => N = Ländercode, 1500072322 = Nutzziffern, 8 = Prüfziffer
my $fehler = 0; # Fehlervariable
my $pruefnummer = shift || die "\n -> Die: Keine Pruefnummer als Parameter angegeben!\n\n"; # Parameter prüfen
if ( length($pruefnummer) != 12 ) { $fehler++; } # muss 12 Zeichen lang sein
if ( ! $fehler ) { # Wenn die pruefnummer keine 12 Zeichen lang ist
# landcode - Länderkennzeichnung (erster Buchstabe), nutz_ziffern = 10 Ziffern, checksum = Prüfziffer (12. Ziffer)
my ( $landcode, $nutz_ziffern, $checksum ) = $pruefnummer =~ /^(\D{1})(\d{10})(\d{1})/;
my %alphabet; # Hash mit den Buchstabenpositionen vom Alphabet
@alphabet{"a".."z"} = 1..26;
my $new_landcode = $alphabet{lc($landcode)}; # Ländercode in Zahl umwandeln
$nutz_ziffern .= $new_landcode; # Position des Ländercodes den Nutzziffern anhängen (zum berechnen der Quersumme)
# Quersumme bilden
my $quersumme;
foreach my $d ( split //, $nutz_ziffern ) {
$quersumme += $d;
}
my $neuner_rest = $quersumme % 9; # Neunerrest bilden
my $new_checksum = 8 - $neuner_rest; # neue Prüfziffer bilden
if ( $new_checksum == 0 ) { $new_checksum = 9; } # Ausnahme bei "0"
if ( $new_checksum != $checksum ) { $fehler++; } # Prüfziffern vergleichen
}
( $fehler ) ? ( print "\n -> Der Schein $pruefnummer ist <ungültig!>\n\n" ) : ( print "\n -> Der Schein $pruefnummer ist <gültig>\n\n" );
Lösung von: Mister iC ()
function isValidNoteSerial(serial) {
var srl, chksum;
srl = eval((serial[0].charCodeAt(0) - 64).toString().split("").join("+")) +
serial.substr(1, serial.length - 2);
chksum = 8 - ((eval(srl.split("").join("+")) % 9));
if (chksum == 0) chksum = 9;
return (chksum == serial[serial.length - 1]);
}
console.log(isValidNoteSerial("N15000723228"));
Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)
'2.6.2017 - Powerbasic 10
#COMPILE EXE
#DIM ALL
FUNCTION PBMAIN () AS LONG
DIM SerienNummer AS STRING
DIM i AS INTEGER
DIM Quersumme AS INTEGER
DIM PruefZiffer AS INTEGER
SerienNummer = INPUTBOX$("Euro-Seriennummer", EXE.NAME$, "N15000723228")
IF SerienNummer ="" THEN EXIT FUNCTION
'Quersumme mit Wert aus Ländercode initialisieren
Quersumme = ASC(UCASE$(LEFT$(SerienNummer, 1))) - 64
'Ohne Ländercode, ohne Prüfziffer
FOR i = 2 TO LEN(SerienNummer) -1
Quersumme += VAL(MID$(SerienNummer, i, 1))
NEXT i
Pruefziffer = 8 - (Quersumme MOD 9)
IF Pruefziffer = 0 THEN Pruefziffer = 9
IF VAL(RIGHT$(SerienNummer,1)) = Pruefziffer THEN
MSGBOX "Seriennummer ist korrekt",,EXE.NAME$
ELSE
MSGBOX "Seriennummer stimmt nicht - Prüfziffer sollte " & FORMAT$(Pruefziffer) & " sein.",,EXE.NAME$
END IF
END FUNCTION
Lösung von: Markus Sägesser (keine)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
char serienNummer[13];
short zeichenPassend = 0;
int pruefZiffer;
puts("Bitte geben Sie die Seriennummer der Euro-Banknote ein, die sie prüfen möchten: ");
scanf("%12s", serienNummer);
for (int i = 1; i < strlen(serienNummer); i++) {
if (serienNummer[i] < 48 || serienNummer[i] > 57) {
zeichenPassend = 1;
break;
}
}
if (serienNummer[0] < 65 || serienNummer[0] > 91) {
puts("Ungültiger Ländercode an erster Stelle!");
} else if (strlen(serienNummer) < 12) {
puts("Seriennummer ist zu kurz!");
} else if (zeichenPassend) {
puts("Die Seriennummer darf nur aus einem Buchstaben und 11 Ziffern bestehen!");
} else {
pruefZiffer = (int) serienNummer[0] - 64;
for (int i = 1; i < strlen(serienNummer) - 1; i++) {
pruefZiffer += serienNummer[i] - '0';
}
pruefZiffer = ((8 - pruefZiffer % 9) == 0) ? 9 : 8 - pruefZiffer % 9;
if (pruefZiffer != serienNummer[11] - '0') {
printf("Prüfziffer ungültig! Errechnete Prüfziffer: %d", pruefZiffer);
} else {
printf("Die eingegebene Seriennummer ist gültig! Errechnete Prüfziffer: %d", pruefZiffer);
}
}
return (EXIT_SUCCESS);
}
Lösung von: Swen Krüger ()
# Prüfziffer auf Euro-Banknoten
# Author: Apop85
# Test number: N15000723228
def check_num(check_this):
check_this=list(check_this)
check_this[0]=str(ord(check_this[0].upper())-64)
check_this=''.join(check_this)
cross_sum=0
for i in range(0,len(check_this)-1):
cross_sum+=int(check_this[i])
if 8-cross_sum%9 == int(check_this[-1]):
return True
elif (8-cross_sum%9,check_this[-1]) == (0,9):
return True
else:
return False
def output(check):
if check:
print('Prüfnummer ist gültig')
else:
print('Prüfnummer ist ungültig')
check_this=input('Prüfnummer eingeben: '))
check=check_num(check_this)
output(check)
Lösung von: Name nicht veröffentlicht
// C++ 17 | VS-2022
#include <iostream>
#include <numeric>
#include <string>
constexpr size_t LEN_NUM{ 12 };
// Hier ausführlich in Einzelschritten erläutert,
// obgleich man hier auch einige Schritte hätte zusammenfassen können.
// siehe Webcode: macy-76jt
const auto is_valid_note(const std::string& ser_num) {
// wenn keine 12 Zeichen, dann falsch [wahr]
if (ser_num.length() != LEN_NUM) return false;
// Ländercode erfassen ['N']
const auto country_code_chr{ std::toupper(ser_num[0]) };
// wenn Ländercode kein Buchstabe, dann falsch [wahr]
if (!std::isalpha(country_code_chr)) return false;
// Ländercode in Zahl (Integer) umwandeln [14]
const auto country_code_num{ country_code_chr - 'A' + 1 };
// Ländercode in String umwandeln ["14"]
const auto country_code_str{ std::to_string(country_code_num) };
// Nutzziffern ermitteln ["1500072322"]
const auto digits{ ser_num.substr(1, LEN_NUM - 1) };
// Ländercode an de Anfang des Gesamtstrings setzen und die Nutzziffern
// (ausgenommen der Prüfziffer) hinzufügen ["141500072322"]
const auto whole_num{ country_code_str + digits };
// Prüfziffer erfassen (letzte Stelle) [8]
const auto check_digit{ ser_num[LEN_NUM - 1] - '0' };
// Quersumme aller Ziffern aus Gesamtstring berechnen [27]
const auto digit_sum{ std::accumulate(whole_num.begin(), whole_num.end() - 1, 0, [](auto a, auto b) { return a + (b - '0'); }) };
// 9er-Divisionsrest aus der Quersumme bilden [0]
const auto remainder{ digit_sum % 9 };
// 8 minus Divisionsrest [8] entspricht der Prüfziffer [wahr]
const auto result{ (8 - remainder == 0 ? 9 : 8 - remainder) == check_digit };
return result;
}
int main() {
constexpr auto sn{ "N15000723228" };
std::cout << "Die Serialnummer " << sn << " ist " << (is_valid_note(sn) ? "" : "in") << "korrekt!" << "\n";
}
Lösung von: Jens Kelm (@JKooP)
' VBA
' ohne Überprüfung der Eingaben
Function GetDigitSum(num$)
Dim sum%
For i% = 1 To Len(num)
sum = sum + CInt(Mid(num, i, 1))
Next
GetDigitSum = sum
End Function
Function IsValidNote(sn$)
r% = 8 - (GetDigitSum(CStr(Asc(UCase(Left(sn, 1))) - 64) + Mid(sn, 2, 10)) Mod 9)
IsValidNote = IIf(r = 0, 9, r) = CInt(Right(sn, 1))
End Function
Sub Main()
Debug.Print IsValidNote("N15000723228")
End Sub
Lösung von: Jens Kelm (@JKooP)
Verifikation/Checksumme:
Beispiele:
X 0272716935 5
Z 6016220022 6
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Meta
Zeit: | 0.5 |
Schwierigkeit: | Mittel |
Webcode: | fy4o-hgdx |
Autor: | Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch) |