# charAt



## Guest (29. Jan 2008)

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?


```
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();
	}

}
```


----------



## The_S (29. Jan 2008)

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


----------



## SlaterB (29. Jan 2008)

wenn ein char c '4' ist, dann ist er gleichzeitig int 52,
mit c - 48 erhälst du also int 4


----------



## Guest (29. Jan 2008)

danke für die erklärung, jetzt ists mir klar


----------



## Leroy42 (29. Jan 2008)

```
int b1  = (sozial.charAt(0) - '0');
```
ginge auch und wäre besser.


----------

