segunda-feira, 22 de setembro de 2008
Convertendo String para Date em java
import java.util.Date;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class Data {
public static void main(String[] args) {
DateFormat fmt = new SimpleDateFormat("dd/MM/yyyy");
Date data = null;
try {
data = new Date(fmt.parse("05/08/1987").getTime());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(data);
}
}
sexta-feira, 12 de setembro de 2008
Validando cartão de crédito em java
import java.io.InputStreamReader;
public class CCUtils {
public static final int INVALID = -1;
public static final int VISA = 0;
public static final int MASTERCARD = 1;
public static final int AMERICAN_EXPRESS = 2;
public static final int EN_ROUTE = 3;
public static final int DINERS_CLUB = 4;
private static final String [] cardNames =
{ "Visa" ,
"Mastercard",
"American Express",
"En Route",
"Diner's CLub/Carte Blanche",
};
/**
* Valid a Credit Card number
*/
public static boolean validCC(String number)
throws Exception {
int CardID;
if ( (CardID = getCardID(number)) != -1)
return validCCNumber(number);
return false;
}
/**
* Get the Card type
* returns the credit card type
* INVALID = -1;
* VISA = 0;
* MASTERCARD = 1;
* AMERICAN_EXPRESS = 2;
* EN_ROUTE = 3;
* DINERS_CLUB = 4;
*/
public static int getCardID(String number) {
int valid = INVALID;
String digit1 = number.substring(0,1);
String digit2 = number.substring(0,2);
String digit3 = number.substring(0,3);
String digit4 = number.substring(0,4);
if (isNumber(number)) {
/* ----
** VISA prefix=4
** ---- length=13 or 16 (can be 15 too!?! maybe)
*/
if (digit1.equals("4")) {
if (number.length() == 13 || number.length() == 16)
valid = VISA;
}
/* ----------
** MASTERCARD prefix= 51 ... 55
** ---------- length= 16
*/
else if (digit2.compareTo("51")>=0 && digit2.compareTo("55")<=0) {
if (number.length() == 16)
valid = MASTERCARD;
}
/* ----
** AMEX prefix=34 or 37
** ---- length=15
*/
else if (digit2.equals("34") || digit2.equals("37")) {
if (number.length() == 15)
valid = AMERICAN_EXPRESS;
}
/* -----
** ENROU prefix=2014 or 2149
** ----- length=15
*/
else if (digit4.equals("2014") || digit4.equals("2149")) {
if (number.length() == 15)
valid = EN_ROUTE;
}
/* -----
** DCLUB prefix=300 ... 305 or 36 or 38
** ----- length=14
*/
else if (digit2.equals("36") || digit2.equals("38") ||
(digit3.compareTo("300")>=0 && digit3.compareTo("305")<=0)) {
if (number.length() == 14)
valid = DINERS_CLUB;
}
}
return valid;
/* ----
** DISCOVER card prefix = 60
** -------- lenght = 16
** left as an exercise ...
*/
}
public static boolean isNumber(String n) {
try {
double d = Double.valueOf(n).doubleValue();
return true;
}
catch (NumberFormatException e) {
e.printStackTrace();
return false;
}
}
public static String getCardName(int id) {
return (id > -1 && id < cardNames.length ? cardNames[id] : "");
}
public static boolean validCCNumber(String n) {
try {
/*
** known as the LUHN Formula (mod10)
*/
int j = n.length();
String [] s1 = new String[j];
for (int i=0; i < n.length(); i++) s1[i] = "" + n.charAt(i);
int checksum = 0;
for (int i=s1.length-1; i >= 0; i-= 2) {
int k = 0;
if (i > 0) {
k = Integer.valueOf(s1[i-1]).intValue() * 2;
if (k > 9) {
String s = "" + k;
k = Integer.valueOf(s.substring(0,1)).intValue() +
Integer.valueOf(s.substring(1)).intValue();
}
checksum += Integer.valueOf(s1[i]).intValue() + k;
}
else
checksum += Integer.valueOf(s1[0]).intValue();
}
return ((checksum % 10) == 0);
}
catch (Exception e) {
e.printStackTrace();
return false;
}
}
/*
** For testing purpose
**
** java CCUtils [credit card number] or java CCUtils
**
*/
public static void main(String args[]) throws Exception {
String aCard = "";
if (args.length > 0)
aCard = args[0];
else {
BufferedReader input =
new BufferedReader(new InputStreamReader(System.in));
System.out.print("Card number : ");
aCard = input.readLine();
}
if (getCardID(aCard) > -1) {
System.out.println("This card is supported.");
System.out.println("This a " + getCardName(getCardID(aCard)));
System.out.println
("The card number " + aCard + " is "
+ (validCC(aCard)?" good.":" bad."));
}
else
System.out.println("This card is invalid or unsupported!");
}
}
quarta-feira, 10 de setembro de 2008
Operação de módulo
Linguagem | Operador | O resultado tem o sinal do |
---|---|---|
Ada | mod | Divisor |
rem | Dividendo | |
ASP | Mod | Indefinido |
C (1989) | % | Indefinido |
C (1999) | % | Dividendo |
ColdFusion | MOD | Dividendo |
Common Lisp | mod | Divisor |
Eiffel | \\ | Dividendo |
Fortran | mod | Dividendo |
modulo | Divisor | |
J | |~ | Divisor |
Java | % | Dividendo |
JavaScript | % | Dividendo |
Lua | % | Divisor |
MATLAB | mod | Divisor |
rem | Dividendo | |
MySQL | MOD % | Dividendo |
Objective Caml | mod | Indefinido |
Pascal (Delphi) | mod | Dividendo |
Perl | % | Indefinido |
PHP | % | Dividendo |
PL/I | mod | Divisor (ANSI PL/I) |
Prolog (ISO 1995) | mod | Divisor |
Python | % | Divisor |
RPG | %REM | Dividendo |
Ruby | % | Divisor |
SenseTalk | modulo | Divisor |
rem | Dividendo | |
Verilog (2001) | % | Dividendo |
VHDL | mod | Divisor |
rem | Dividendo | |
Visual Basic | Mod | Dividendo |
Pegando o tamanho de uma String em Lua
Exemplo:
local str = 'stringTeste'
local tamanho = string.len(str)
print(tamanho)
Concatenando Strings em Lua
Exemplo:
local string1 = 'Hello '
local string2 = 'World'
local stringConcatenada = string1..string2
print(stringConcatenada)
terça-feira, 9 de setembro de 2008
A história do salário mínimo brasileiro
VIGÊNCIA | FUNDAMENTO LEGAL | VALOR |
04/07/40 | DL 2.162/40 | 240 mil réis |
01/01/43 | DL 5.670/43 | Cr$300,00 |
01/12/43 | DL 5.977/43 | Cr$380,00 |
01/01/52 | D 30.342/51 | Cr$1.200,00 |
04/07/54 | D 35.450/54 | Cr$2.400,00 |
01/08/56 | D 39.604/56 | Cr$3.800,00 |
01/01/59 | D 45.106-A/58 | Cr$6.000,00 |
18/10/60 | D 49.119-A/60 | Cr$9.600,00 |
16/10/61 | D 51.336/61 | Cr$13.440,00 |
01/01/63 | D 51.631/62 | Cr$21.000,00 |
24/02/64 | D 53.578/64 | Cr$42.000,00 |
01/02/65 | D 55.803/65 | CR$66.000,00 |
01/03/66 | D 57.900/66 | Cr$84.000,00 |
01/03/67 | D 60.231/67 | NCr$105,00 |
26/03/68 | D 62.461/68 | NCr$129,60 |
01/05/69 | D 64.442/69 | NCr$156,00 |
01/05/70 | D 66.523/70 | NCr$187.20 |
01/05/71 | D 68.576/71 | Cr$225,60 |
01/05/72 | D 70.465/72 | Cr$268,80 |
01/05/73 | D 72.148/73 | Cr$312,00 |
01/05/74 | D 73.995/74 | Cr$376,80 |
01/12/74 | Lei 6.147/74 | Cr$415,20 |
01/05/75 | D 75.679/75 | Cr$532,80 |
01/05/76 | D 77.510/76 | Cr$768,00 |
01/05/77 | D 79.610/77 | Cr$1.106,40 |
01/05/78 | D 81.615/78 | Cr$1.560,00 |
01/05/79 | D 84.135/79 | Cr$2.268,00 |
01/11/79 | D 84.135/79 | Cr$2.932,80 |
01/05/80 | D 84.674/80 | Cr$4.149,60 |
01/11/80 | D 85.310/80 | Cr$5.788,80 |
01/05/81 | D 85.950/81 | Cr$8.464,80 |
01/11/81 | D 86.514/81 | Cr$11.928,00 |
01/05/82 | D 87.139/82 | Cr$16.608,00 |
01/11/82 | D 87.743/82 | Cr$23.568,00 |
01/05/83 | D 88.267/83 | Cr$34.776,00 |
01/11/83 | D 88.930/83 | Cr$57.120,00 |
01/05/84 | D 89.589/84 | Cr$97.176,00 |
01/11/84 | D 90.301/84 | Cr$166.560,00 |
01/05/85 | D 91.213/85 | Cr$333.120,00 |
01/11/85 | D 91.861/85 | Cr$600.000,00 |
01/03/86 | DL 2.284/86 | Cz$804,00 |
01/01/87 | Portaria 3.019/87 | Cz$964,80 |
01/03/87 | D 94.062/87 | Czr1.368,00 |
01/05/87 | Portaria 3.149/87 | Cz$1.641,60 |
01/06/87 | Portaria 3.175/87 | Cz$1.969,92 |
10/08/87 | DL 2.351/87 | Cz$1.970,00 |
01/09/87 | D 94.815/87 | Cz$2.400,00 |
01/10/87 | D 94.989/87 | Cz$2.640,00 |
01/11/87 | D 95.092/87 | Cz$3.000,00 |
01/12/87 | D 95.307/87 | Cz$3.600,00 |
01/01/88 | D 95.479/87 | Cz$4.500,00 |
01/02/88 | D 95.686/88 | Cz$5.280,00 |
01/03/88 | D 95.758/88 | Cz$6.240,00 |
01/04/88 | D 95.884/88 | Cz$7.260,00 |
01/05/88 | D 95.987/88 | Cz$8.712,00 |
01/06/88 | D 96.107/88 | Cz$10.368,00 |
01/07/88 | D 96.235/88 | Cz$12.444,00 |
01/08/88 | D 96.442/88 | Cz$15.552,00 |
01/09/88 | D 96.625/88 | Cz$18.960,00 |
01/10/88 | D 96.857/88 | Cz$23.700,00 |
01/11/88 | D 97.024/88 | Cz$30.800,00 |
01/12/88 | D 97.151/88 | Cz$40.425,00 |
01/01/89 | D 97.385/88 | NCz$63,90 |
01/05/89 | D 97.696/89 | NCz$81,40 |
01/06/89 | Lei 7.789/89 | NCz$120,00 |
03/07/89 | D 97.915/89 | NCz$149,80 |
01/08/89 | D 98.003/89 | NCz$192,88 |
01/09/89 | D 98.108/89 | NCz$249,48 |
01/10/89 | D 98.211/89 | NCz$381,73 |
01/11/89 | D 98.346/89 | NCz$557,31 |
01/12/89 | D 98.456/89 | NCz$788,12 |
01/01/90 | D 98.783/89 | NCz$1.283,95 |
01/02/90 | D 98.900/90 | NCz$2.004,37 |
01/03/90 | D 98.985/90 | NCz$3.674,06 |
01/04/90 | Portaria 191-A/90 | Cr$3.674,06 |
01/05/90 | Portaria 289/90 | Cr$3.674,06 |
01/06/90 | Portaria 308/90 | Cr$3.857,66 |
01/07/90 | Portaria 415/90 | Cr$4.904,76 |
01/08/90 | Portaria 429/90 e 3.557/90 | Cr$5.203,46 |
01/09/90 | Portaria 512/90 | Cr$6.056,31 |
01/10/90 | Portaria 561/90 | Cr$6.425,14 |
01/11/90 | Portaria 631/90 | Cr$8.329,55 |
01/12/90 | Portaria 729/90 | Cr$8.836,82 |
01/01/91 | Portaria 854/90 | Cr$12.325,60 |
01/02/91 | MP 295/91 (Lei 8.178/91) | Cr$15.895,46 |
01/03/91 | Lei 8.178/91 | Cr$17.000,00 |
01/09/91 | Lei 8.222/91 | Cr$42.000,00 |
01/01/92 | Lei 8.222/91 e Port. 42/92 - MEFP | Cr$96.037,33 |
01/05/92 | Lei 8.419/92 | Cr$230.000,00 |
01/09/92 | Lei 8.419/92 e Port. 601/92 - MEFP | Cr$522.186,94 |
01/01/93 | Lei 8.542/92 | Cr$1.250.700,00 |
01/03/93 | Port. Interministerial 04/93 | Cr$1.709.400,00 |
01/05/93 | Port. Interministerial 07/93 | Cr$3.303.300,00 |
01/07/93 | Port. Interministerial 11/93 | Cr$4.639.800,00 |
01/08/93 | Port. Interministerial 12/93 | CR$5.534,00 |
01/09/93 | Port. Interministerial 14/94 | CR$9.606,00 |
01/10/93 | Port. Interministerial 15/93 | CR$12.024,00 |
01/11/93 | Port. Interministerial 17/93 | CR$15.021,00 |
01/12/93 | Port. Interministerial 19/93 | CR$18.760,00 |
01/01/94 | Port. Interministerial 20/93 | CR$32.882,00 |
01/02/94 | Port. Interministerial 02/94 | CR$42.829,00 |
01/03/94 | Port. Interministerial 04/94 | URV 64,79 = R$64,79 |
01/07/94 | MP 566/94 | R$64,79 |
01/09/94 | MP 637/94 | R$70,00 |
01/05/95 | Lei 9.032/95 | R$100,00 |
01/05/96 | R$112,00 | |
01/05/97 | | R$120,00 |
01/05/98 | | R$130,00 |
01/05/99 | | R$136,00 |
03/04/00 | MP 2019 de 23/03/00 e 2019-1 de 20/04/00 Convertidas na Lei nº 9971, de 18/05/2000. | R$151,00 |
01/04/01 | | R$180,00 |
01/04/02 | Medida Provisória n° 35 publicada no D.O.U. em 28.03.2002 | R$ 200,00 |
01/04/03 | Lei n° 10.699, de 09.07.2003 - Clique aqui - | R$ 240,00 |
01/05/04 | Lei n° 10.888, de 24.06.2004 - Clique aqui - | R$ 260,00 |
01/05/05 | Lei nº 11.164, de 18.08.2005 - Clique aqui - | R$ 300,00 |
01/04/2006 | Lei nº 11.321, de 07.07.2006 - Clique aqui - Leia matéria aqui | R$ 350,00 |
01/04/2007 | Lei nº 11.498, de 28.06.2007 - Clique aqui - | R$ 380,00 |
01/03/2008 | Medida Provisória nº 421/2008, de 29.02.2008 - Clique aqui - | R$ 415,00 |
fonte: www.portalbrasil.net
sexta-feira, 5 de setembro de 2008
A bandeira brasileira com legenda (Meet the World)
Fonte: www.englishexperts.com.br
quinta-feira, 4 de setembro de 2008
Importando certificados SSL para a JVM
java.security.cert
ou então podemos importar estes certificados para a Java Virtual Machine (JVM) através da ferramenta keytool.Importar os certificados para JVM é útil quando por exemplo queremos trabalhar com web services atráves de uma conexão segura, pois utilizar um web service não requer browser, mas uma conexão https requer que o certificado seja reconhecido.
A seguir deixo algumas informações sobre certificados, logo depois deixo as linhas de comando para se importar certificados para a JVM.
Certificados gerados pelo keytool (ferramenta que vem na JDK) ou OpenSSL são chamados de auto-assinados, ou seja não são assinados por uma "CA" (Certificate Authority), que são as empresas que emitem certificados "de verdade". Ou seja, não tem ninguem "garantindo" que este certificado é verdadeiro. O browser ao acessar um site seguro, recebe do servidor o certificado e verifica se o mesmo tem "garantia" de uma "CA". Caso não tenha esta "garantia" (assinatura da CA), o browser irá exibir a mensagem perguntando se você quer mesmo acessar este site. Se você disser que sim e ainda instalar este certificado no seu browser, as próximas vezes que você acessar o site ele irá considerar "com garantia". Não é possível bular este esquema. Somente comprando um certificado "de verdade" é que a mensagem não irá aparecer.
Lembrando que se optar por importar o certificado "auto-assinado", isto só irá valer para aquele computador e para o browser que está importando o certificado. Mesmo o certificado sendo auto-assinado, a conexão será criptografada, apenas não há garantia de que o site é confiável.
Certificados válidos para a JVM:
A JVM possui alguns certificados reconhecidos por ela, armazenados dentro do arquivo:
%JAVA_HOME%/jre/lib/security/cacerts
Utilizando esse comando tem como você verificar quais os certificados que ela considera válidos:
keytool -list -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit
A partir daí basta importar o seu certificado para dentro deste arquivo e colocar uma cópia dele dentro deste diretório. Para importar o certificado para este arquivo e auto assina-lo como confiável utilize este comando:
keytool -import -v -trustcacerts -file seu certificado -keystore cacerts -keypass changeit -storepass changeit
Pronto, seu certificado foi importado pela JVM.
quarta-feira, 3 de setembro de 2008
Criptografia com Sha-1 ou Base64
Já com o Base64 é possível criptografar um dado e com a chave correta descriptografar o mesmo.
É comum utilizar algoritmos como o MD5 e o Sha-1 para a criptografia de senha, porque não convém deixar a própria senha armazenada em um banco. Já o Base64 é usado quando há a necessidade de se conhecer o dado criptografado, não apenas saber se é válido.
A seguir deixo duas classes, a primeira pode ser utilizada tanto com MD5 como com Sha-1, e a segunda classe utiliza o Base64.
Classe para MD5 e Sha-1:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
*
* Essa classe pode ser usada tanto com o algoritmo MD5 como
* com o Sha-1. Uma vez criptografado um dado, nao sera possivel
* conhecer o valor original. Para saber se este dado corresponde
* a algum outro, voce deve comparar a string resultante da
* criptografia de ambos.
*
*/
public class CriptografiaMD5 {
private static MessageDigest md = null;
static {
try {
// Pode-se usar o algoritmo Sha-1 tambem,
// basta bustituir na linha abaixo.
md = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException ex) {
ex.printStackTrace();
}
}
private static char[] hexCodes(byte[] text) {
char[] hexOutput = new char[text.length * 2];
String hexString;
for (int i = 0; i < text.length; i++) {
hexString = "00" + Integer.toHexString(text[i]);
hexString.toUpperCase().getChars(hexString.length() - 2,
hexString.length(), hexOutput, i * 2);
}
return hexOutput;
}
public static String criptografar(String pwd) {
if (md != null) {
return new String(hexCodes(md.digest(pwd.getBytes())));
}
return null;
}
public static void main(String[] args){
String senha = "123456";
System.out.println(CriptografiaMD5.criptografar(senha));
senha = "132546";
System.out.println(CriptografiaMD5.criptografar(senha));
}
}
Classe para Base64:
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.KeySpec;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
*
* Essa classe usa Base64 e permite a descriptografia, usando-se a
* chave correta.
*
*/
public final class CriptografiaBase64 {
private static SecretKey skey;
private static KeySpec ks;
private static PBEParameterSpec ps;
private static final String algorithm = "PBEWithMD5AndDES";
private static BASE64Encoder enc = new BASE64Encoder();
private static BASE64Decoder dec = new BASE64Decoder();
static {
try {
SecretKeyFactory skf = SecretKeyFactory.getInstance(algorithm);
ps = new PBEParameterSpec (new byte[]{3,1,4,1,5,9,2,6}, 20);
// Esta e a chave que voce quer manter secreta.
ks = new PBEKeySpec ("EAlGeEen3/m8/YkO".toCharArray());
skey = skf.generateSecret (ks);
} catch (java.security.NoSuchAlgorithmException ex) {
ex.printStackTrace();
} catch (java.security.spec.InvalidKeySpecException ex) {
ex.printStackTrace();
}
}
public static final String encrypt(final String text)
throws
BadPaddingException,
NoSuchPaddingException,
IllegalBlockSizeException,
InvalidKeyException,
NoSuchAlgorithmException,
InvalidAlgorithmParameterException {
final Cipher cipher = Cipher.getInstance(algorithm);
cipher.init(Cipher.ENCRYPT_MODE, skey, ps);
return enc.encode (cipher.doFinal(text.getBytes()));
}
public static final String decrypt(final String text)
throws
BadPaddingException,
NoSuchPaddingException,
IllegalBlockSizeException,
InvalidKeyException,
NoSuchAlgorithmException,
InvalidAlgorithmParameterException {
final Cipher cipher = Cipher.getInstance(algorithm);
cipher.init(Cipher.DECRYPT_MODE, skey, ps);
String ret = null;
try {
ret = new String(cipher.doFinal(dec.decodeBuffer (text)));
} catch (Exception ex) {
}
return ret;
}
public static void main(String[] args) throws Exception {
String password = "123456";
String encoded = CriptografiaBase64.encrypt (password);
System.out.println ("\nString: " + password);
System.out.println ("String criptografada: " + encoded);
System.out.println ("String descriptografada: " +
CriptografiaBase64.decrypt(encoded));
password = "123459";
encoded = CriptografiaBase64.encrypt (password);
System.out.println ("\nString: " + password);
System.out.println ("String criptografada: " + encoded);
System.out.println ("String descriptografada: " +
CriptografiaBase64.decrypt(encoded));
}
}
segunda-feira, 1 de setembro de 2008
Gerando um número aleatório (random) em java
int i = 1 + (int)(Math.random() * n);