Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

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

Bitte melde dich an um einen Kommentar abzugeben

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

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 0.5
Schwierigkeit: Mittel
Webcode: fy4o-hgdx
Autor: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen