charAt

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Ich hab hier ein Programm, dass mir die Sozialversicherungsnummer überprüft... nur verstehe ich nicht, was das -48 bei charAt soll... kann mir das vielleicht jemand erklären?

Code:
import java.io.*;

public class Sozial 
{
	public static String getString()
	throws IOException
	{
		BufferedReader buffin = 
			new BufferedReader(
			new InputStreamReader(System.in)
		);
		String result = buffin.readLine();
		return result;
	}
	
	// SozialversicherungsNummer prüfen
	public static boolean checkSOZIAL(String sozial)
	{
		
		// Sonderzeichen durch einen leeren String
		// ersetzen
		
		sozial = sozial.replaceAll("-", "");
		sozial = sozial.replaceAll(" ", "");
		
		// Sozialversicherungsnummer-Nummer in einzelne Ziffern zerlegen
		
		int b1  = (sozial.charAt(0)-48);
		int b2  = (sozial.charAt(1)-48);
		int b3  = (sozial.charAt(2)-48);
		int b4  = 0;
		int b5  = (sozial.charAt(4)-48);
		int b6  = (sozial.charAt(5)-48);
		int b7  = (sozial.charAt(6)-48);
		int b8  = (sozial.charAt(7)-48);
		int b9  = (sozial.charAt(8)-48);
		int b10 = (sozial.charAt(9)-48);
		
		if(sozial.charAt(3)=='X' || sozial.charAt(3)=='x')
		{ 
			b4 = 10; 
		}
		else 
		{
			b4 = sozial.charAt(3)-48; 
		}
		
		// wirkliche Prüf-Ziffer errechnen
		
		int pruef = ((3*b1 + 7*b2 + 9*b3 + 0*b4 + 5*b5 + 8*b6 + 4*b7 + 2*b8 + 1*b9 + 6*b10) % 11 );
		
		// Mit der Prüfziffer der Sozialversicherungs-Nummer überprüfen
		
		return (b4==pruef); 
		
	}

	public static void main(String[] args)
	throws IOException
	{
		boolean correct = false;
		
		System.out.println("Pruefung der Sozialversicherungsnummer");
		System.out.println("============");
		while(correct == false)
		{
			System.out.println();
			System.out.print("Sozialv-Nr. > ");
			String sozial = getString();
			System.out.println();
			if(checkSOZIAL(sozial)==true) 
			{
				System.out.println("Das ist eine Sozialversicherungsnummer.");
				correct = true;
			}
			else
			{
				System.out.println("Das ist keine Sozialversicherungsnummer.");
				correct = false;
			}
		}
		// Programm beenden
		System.out.println();
		System.out.println("Please press Enter to continue...");
		getString();
	}

}
 
charAt liefert einen Character zurück. Du benötigst aber den Integer "hinter" dem Charakter. Da der char in ASCII codiert ist, wird die beim cast in einen Integer nicht die jeweilige Zahl, die der char repräsentiert, zurückgeliefert, sondern der dazugehörige ASCII-Code. für 0 48, für 1 49, für 2 50, ... deshalb -48

ascii.gif
 
wenn ein char c '4' ist, dann ist er gleichzeitig int 52,
mit c - 48 erhälst du also int 4
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben