忍者ブログ
Flex,Java,Html など、調べた事のメモ帳です。 間違ってたらゴメンなさい。
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

JAN8 は 7 桁の文字列から JAN13 は 12 桁の文字列からそれぞれ Check Digit を作成します。
コード
 
public static String makeCheckDigit(String barcode) {
    int initPosition1 = 0;
    int initPosition2 = 0;
    if (barcode.length() == 12) {
        initPosition1 = 1;
        initPosition2 = 0;
    } else if (barcode.length() == 7) {
        initPosition1 = 0;
        initPosition2 = 1;
    } else {
        throw new IllegalArgumentException(
                "長さが不正です。[" + barcode + "]");
    }
    int sum = 0;
    for (int i = initPosition1; i < barcode.length(); i += 2) {
        sum += Integer.parseInt(barcode.substring(i, i + 1));
    }
 
    sum *= 3;
    for (int i = initPosition2; i < barcode.length(); i += 2) {
        sum += Integer.parseInt(barcode.substring(i, i + 1));
    }
    String placeOfOne = String.valueOf(sum).substring(
        String.valueOf(sum).length() - 1);
    if (placeOfOne.equals("0")) {
        return placeOfOne;
    } else {
        return String.valueOf(10 - Integer.parseInt(placeOfOne));
    }
}

Java でメールを送信する為には、JavaMail API が必要になります。
以下にメール送信の例を書きますが SMTP サーバーやメールアドレスは適宜設定してください。
テキストメールを送信する場合は mail.jar だけが必要になります。

テキストメール送信例
 
 
import java.util.*;
 
import javax.mail.*;
import javax.mail.internet.*;
 
public class MailTest {
    private String charset_;
    private Session session_;
 
    public MailTest(String smtpHost, String charset) {
        if (smtpHost == null) {
            throw new NullPointerException("SMTP Host is null.");
        }
        if (charset == null) {
            throw new NullPointerException("Charctor set is null.");
        }
        charset_ = charset;
        Properties props = new Properties();
        //SMTP サーバの設定
        props.put("mail.smtp.host", smtpHost);
        session_ = Session.getDefaultInstance(props, null);
    }
 
    private void sendMail(String body) throws MessagingException {
        MimeMessage msg = new MimeMessage(session_);
 
        //送信先の設定
        msg.setRecipient(Message.RecipientType.TO, new InternetAddress(
                "himtodo@infoseek.jp"));  
 
        //送信元の設定
        msg.setFrom(new InternetAddress("himtodo@infoseek.jp"));
 
        //送信日付の設定
        msg.setSentDate(new Date());
 
        //Subject の設定
        msg.setSubject("テストメールです", charset_);
 
        //本文 の設定
        msg.setText(body, charset_);
 
        //メールの送信
        Transport.send(msg);
    }
 
    public static void main(String[] args) throws Exception {
        MailTest mail = new MailTest("localhost", "iso-2022-jp");
        mail.sendMail("テストメールです。");
    }
}
 
添付メールを送信したい場合は mail.jar 及び activation.jar が必要になります。
添付メール送信例
 
 
 
import java.io.*;
import java.util.*;
 
import javax.activation.*;
import javax.mail.*;
import javax.mail.internet.*;
 
public class MailTest {
    private String charset_;
    private Session session_;
 
    public MailTest(String smtpHost, String charset) {
        if (smtpHost == null) {
            throw new NullPointerException("SMTP Host is null.");
        }
        if (charset == null) {
            throw new NullPointerException("Charctor set is null.");
        }
        charset_ = charset;
        Properties props = new Properties();
        //SMTP サーバの設定
        props.put("mail.smtp.host", smtpHost);
        session_ = Session.getDefaultInstance(props, null);
    }
 
    private void sendMail(String body) throws MessagingException {
        MimeMessage msg = new MimeMessage(session_);
 
        //送信先の設定
        msg.setRecipient(Message.RecipientType.TO, new InternetAddress(
                "himtodo@infoseek.jp"));
 
        //送信元の設定
        msg.setFrom(new InternetAddress("himtodo@infoseek.jp"));
 
        //送信日付の設定
        msg.setSentDate(new Date());
 
        //Subject の設定
        msg.setSubject("テストメールです", charset_);
 
 
        //本文 の設定
        MimeBodyPart messageBody = new MimeBodyPart();
        messageBody.setContent(body, "text/plain; charset=" + charset_);
        
        //添付ファイル の設定
        MimeBodyPart attachBody = new MimeBodyPart();
        FileDataSource source = new FileDataSource(new File("C:/work/test.txt"));
        attachBody.setDataHandler(new DataHandler(source));
        attachBody.setFileName("test.txt");
 
        //Multipart の作成
        MimeMultipart mp = new MimeMultipart();
        mp.addBodyPart(messageBody);
        mp.addBodyPart(attachBody);
        msg.setContent(mp);
 
        //メールの送信
        Transport.send(msg);
    }
 
    public static void main(String[] args) throws Exception {
        MailTest mail = new MailTest("localhost", "iso-2022-jp");
        mail.sendMail("テストメールです。");
    }
}

Java で正規表現を使う場合は、java.util.regex パッケージを使用します。 他にも、jakarta oro などがありますが、ここでは java.util.regex パッケージの使い方を紹介します。

このパッケージにクラスは Matcher と Pattern の 2 つだけです。
Pattern#compile で正規表現を作成して、Pattern#matcher で、Matcher を作成し、作成された Matcher の各メソッドで評価を行います。


ソース記述例 matches

Pattern p = Pattern.compile("^a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();

ソース記述例 置換

Pattern p = Pattern.compile("a?");
Matcher m = p.matcher("aaaaab");
System.out.println(m.replaceFirst("c"));
System.out.println(m.replaceAll("c"));
 

MD5 値の取得方法

メッセージダイジェストの取得は java.security.MessageDigest を使って簡単に可能です。
MessageDigest#getInstance(String algorithm) を使用してアルゴリズムを指定した MessageDigest のインスタンスを取得します。
アルゴリズム には MD5 の他 SHA-1 等有名なメッセージダイジェストは、ほとんど使用可能なようです。

byte 配列から MD5

byte 配列からメッセージダイジェストを取得する場合は非常に簡単で、MessageDigest#digest で取得可能です。 以下にコードのサンプルを書きます

 

※パスワードの保存等で利用します。


MessageDigest digest = MessageDigest.getInstance("MD5"); byte[] hash = digest.digest("hoge".getBytes());

 

InputStream から MD5

InputStram からメッセージダイジェストを取得する場合は、MessageDigest#update と MessageDigest#digest を併用しなければなりません。update ですべての Stream を読み込んだ後に digest で取得します。 公開されている

 

※アプリケーションの MD5 値を取得する時等に利用します。


InputStream in = new FileInputStream("C:/work/test.xls");
MessageDigest digest = MessageDigest.getInstance("MD5");
try {
    byte[] buff = new byte[4096];
    int len = 0;
    while ((len = in.read(buff, 0, buff.length)) >= 0) {
        digest.update(buff, 0, len);
    }
} catch (IOException e) {
    throw e;
} finally {
    if (in != null) {
        try {
            in.close();
        } catch (IOException e) {
        }
    }
}
byte[] hash = digest.digest();
 

基本的には Integer#toHexString(byte) を利用するのですが、 Java の byte 型は符号付の為、 全て正の値に直さなくてはいけません。


ソース記述例

public static void main(String[] args) {
    String str = "hoge-あ";
    byte[] arr = str.getBytes();
     for (int i = 0; i < arr.length; i++) {
        System.out.println(Integer.toHexString(arr[i] & 0xff));
    }
}

を実行すると


出力結果

68 6f 67 65 2d 82 a0


また、sun.misc パッケージの HexDumpEncoder を使う方法もあります。


ソース記述例

public static void main(String[] args) {
    String str = "hoge-あ";
    HexDumpEncoder enc = new HexDumpEncoder();
    System.out.println(enc.encode(str.getBytes()));
}

を実行すると


出力結果

0000: 68 6F 67 65 2D 82 A0
 
ブログランキング
にほんブログ村 IT技術ブログ IT技術メモへ
 
カレンダー
04 2017/05 06
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
人気ブログランキング
ブログランキング ブログランキング
最新CM
最新TB
ブログ内検索
PR
ATOM  
ATOM 
RSS  
RSS 
Copyright ©   プログラムメモ   All Rights Reserved
Design by MMIT  Powered by NINJA TOOLS
忍者ブログ [PR]